diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 000000000..509f24e0e --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 45b5230784e5d2f786047b47b9f6f233 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/5/_sources/faq.rst.txt b/5/_sources/faq.rst.txt index 1751938d2..3180806a7 100644 --- a/5/_sources/faq.rst.txt +++ b/5/_sources/faq.rst.txt @@ -7,7 +7,7 @@ Installing and updating ======================= .. dropdown:: Q: How do I install Spyder? - :container: + dropdown-id-install-spyder + :name: install-spyder The easiest way to install Spyder is with the Anaconda Python distribution, which comes with everything you need to get started in an all-in-one package. Download it from its `webpage`_. @@ -18,7 +18,7 @@ Installing and updating .. dropdown:: Q: How do I install Spyder on Windows Subsystem for Linux 2 (WSL2)? - :container: + dropdown-id-install-wsl2 + :name: install-wsl2 If you already installed Spyder on your Windows machine, you do not need to reinstall it on a WSL2-based Linux environment if your code must run there. @@ -47,7 +47,7 @@ Installing and updating .. dropdown:: Q: How do I update Spyder using conda? - :container: + dropdown-id-update-conda + :name: update-conda From the command line (or Anaconda prompt on Windows), run: @@ -64,7 +64,7 @@ Installing and updating .. dropdown:: Q: How do update I Spyder using Anaconda Navigator? - :container: + dropdown-id-update-navigator + :name: update-navigator Open the "gear" menu in Spyder's section under :guilabel:`Home` in Navigator. Go to :guilabel:`Install specific version` and select the version of Spyder you want to use. @@ -80,7 +80,7 @@ Running Spyder ============== .. dropdown:: Q: How do I run Spyder? - :container: + dropdown-id-run-spyder + :name: run-spyder You can launch it in any of the following ways: @@ -98,7 +98,7 @@ Running Spyder .. dropdown:: Q: Can I try Spyder without installing it? - :container: + dropdown-id-run-binder + :name: run-binder Yes! With `Binder`_, you can work with a fully functional copy of Spyder that runs right in your web browser. @@ -109,7 +109,7 @@ Running Spyder .. dropdown:: Q: What are the system requirements for Spyder? How resource-intensive is it? - :container: + dropdown-id-run-system-reqs + :name: run-system-reqs Spyder works on modern versions of Windows, macOS and Linux (see the table below for recommended versions) via Anaconda, as well as other methods. It typically uses relatively minimal CPU when idle, and 0.5 GB - 1 GB of RAM, depending on how long you've been using it and how many files, projects, panes and consoles you have open. @@ -128,7 +128,7 @@ Running Spyder .. dropdown:: Q: How do I run Spyder installed in a conda environment using Anaconda Navigator? - :container: + dropdown-id-run-navigator + :name: run-navigator Select the environment you want to launch Spyder from under :guilabel:`Applications on`. If Spyder is installed in this environment, you will see it in Navigator's :guilabel:`Home` window. @@ -139,7 +139,7 @@ Running Spyder .. dropdown:: Q: How do I run Spyder installed in a conda environment using the command line? - :container: + dropdown-id-run-terminal + :name: run-terminal Activate your conda environment by typing the following in your terminal (or Anaconda Prompt on Windows): @@ -158,7 +158,7 @@ Using Spyder ============ .. dropdown:: Q: How do I install Python packages to use within Spyder if I installed Spyder with conda? - :container: + dropdown-id-using-install-packages + :name: using-install-packages The first approach for installing a package should be using conda. In your system terminal (or Anaconda Prompt on Windows), type: @@ -176,10 +176,8 @@ Using Spyder :start: 306 -.. _using-existing-environment: - .. dropdown:: Q: How do I get Spyder to work with my existing Python packages/environment? - :container: + dropdown-id-using-existing-environment + :name: using-existing-environment To work with an existing environment in Spyder, change the default Python interpreter for new :doc:`/panes/ipythonconsole`\s to point to this environment. @@ -208,10 +206,8 @@ Using Spyder Execute the given command in your terminal (the Anaconda Prompt on Windows) with the environment activated, and finally restart the kernel once more. -.. _using-packages-installer: - .. dropdown:: Q: How do I install Python packages to use within Spyder if I downloaded Spyder from the standalone installers? - :container: + dropdown-id-using-packages-installer + :name: using-packages-installer Watch our video on using additional packages or follow the instructions below. @@ -237,7 +233,7 @@ Using Spyder .. dropdown:: Q: How do I reset Spyder's preferences to the defaults? - :container: + dropdown-id-using-reset-prefs + :name: using-reset-prefs Either use the :guilabel:`Reset Spyder to factory defaults` under :guilabel:`Tools` in Spyder's menu bar, the :guilabel:`Reset Spyder settings` Start menu shortcut (Windows), or run ``spyder --reset`` in your system terminal (Anaconda prompt on Windows). @@ -246,7 +242,7 @@ Using Spyder .. dropdown:: Q: How do I change Spyder's language? - :container: + dropdown-id-using-change-language + :name: using-change-language Under :guilabel:`General` in Spyder's :guilabel:`Preferences`, go to the :guilabel:`Advanced settings` tab and select your language from the options displayed under :guilabel:`Language`. @@ -255,7 +251,7 @@ Using Spyder .. dropdown:: Q: How do I use code cells in Spyder? - :container: + dropdown-id-using-code-cells + :name: using-code-cells To create a cell in Spyder's :doc:`/panes/editor`, type ``#%%`` in your script. Each ``#%%`` will make a new cell. @@ -266,7 +262,7 @@ Using Spyder .. dropdown:: Q: How do I use plugins with Spyder (e.g. Spyder-Notebook, Spyder-Terminal, Spyder-Unittest)? - :container: + dropdown-id-using-plugins + :name: using-plugins Spyder plugins are available in the ``conda-forge`` conda channel. To install one, type on the command line (or Anaconda Prompt on Windows): @@ -292,7 +288,7 @@ Using Spyder .. dropdown:: Q: How do I clear all variables before executing my code? - :container: + dropdown-id-using-clear-variables + :name: using-clear-variables Check the option :guilabel:`Remove all variables before execution` in the :guilabel:`Configuration per file...` dialog under the :guilabel:`Run` menu. @@ -301,7 +297,7 @@ Using Spyder .. dropdown:: Q: How do I run my code in a dedicated console or an external system terminal? - :container: + dropdown-id-using-dedicated-console + :name: using-dedicated-console Select the appropriate option in the :guilabel:`Configuration per file...` dialog under the :guilabel:`Run` menu. @@ -310,7 +306,7 @@ Using Spyder .. dropdown:: Q: How do I change the syntax highlighting theme in the Editor? - :container: + dropdown-id-using-syntax-theme + :name: using-syntax-theme Go to :guilabel:`Preferences` and select the theme you want under :guilabel:`Syntax highlighting theme` in the :guilabel:`Appearance` section. @@ -324,14 +320,14 @@ Troubleshooting =============== .. dropdown:: Q: I've found a bug or issue with Spyder. What do I do? - :container: + dropdown-id-troubleshooting-spyder + :name: troubleshooting-spyder You should first follow the steps in our :doc:`troubleshooting guide`. If you can't solve your problem, open an issue by following the instructions in our :doc:`/troubleshooting/submit-a-report` section. .. dropdown:: Q: I get an error in the IPython console running my code! Help! - :container: + dropdown-id-troubleshooting-running-code + :name: troubleshooting-running-code First, make sure the error you are seeing is not a bug in your code. To confirm this, try running it in any standard Python interpreter. @@ -342,7 +338,7 @@ Troubleshooting .. dropdown:: Q: Code completion/help doesn't work; what can I do? - :container: + dropdown-id-troubleshooting-completion + :name: troubleshooting-completion If nothing is displayed in the calltip, hover hint or :doc:`/panes/help` pane, make sure the object you are inspecting has a docstring, and try executing your code in the :doc:`/panes/ipythonconsole` to get help and completions there. If this doesn't work, try restarting PyLS by right-clicking the :guilabel:`LSP Python` label item in the statusbar at the bottom of Spyder's main window, and selecting the :guilabel:`Restart Python Language Server` option. @@ -351,7 +347,7 @@ Troubleshooting .. dropdown:: Q: I get the message "An error occurred while starting the kernel". How do I fix this? - :container: + dropdown-id-troubleshooting-starting-kernel + :name: troubleshooting-starting-kernel First, make sure your version of Spyder-Kernels is compatible with that of Spyder. See the table in the :ref:`spyder-kernels-version-ref` section of the troubleshooting guide to check. @@ -366,7 +362,7 @@ Troubleshooting .. dropdown:: Q: Spyder doesn't launch or is slow on macOS Big Sur. How can I get it working? - :container: + dropdown-id-troubleshooting-macos-bigsur + :name: troubleshooting-macos-bigsur Spyder is in the final stages of being updated for full compatibility with macOS 11 Big Sur, which will be released by the end of 2020 as part of version 4.2.1. However, you can get it working right now with the workaround below. @@ -393,7 +389,7 @@ About Spyder ============ .. dropdown:: Q: What's Spyder's licensing situation? Is commercial use allowed? - :container: + dropdown-id-commercial-use + :name: commercial-use Spyder is 100% free and open source; there is no paid version or prohibition on commercial use. It is developed by its international user community, and supported by its users through `OpenCollective`_ and by its generous sponsoring organizations, including `Quansight`_ and `NumFOCUS`_. @@ -407,7 +403,7 @@ About Spyder .. dropdown:: Q: What do the Anaconda licensing changes mean for Spyder? - :container: + dropdown-id-anaconda-license + :name: anaconda-license If you use Spyder with the Anaconda distribution, they `recently changed`_ their `Terms of Service`_ to add restrictions on large (> 200 employee) for-profit companies using Anaconda on a large scale. However, these terms only apply to the package infrastructure (the full Anaconda distribution and the ``defaults`` conda channel). diff --git a/5/_sources/index.rst.txt b/5/_sources/index.rst.txt index 529c84651..ecec0b97d 100644 --- a/5/_sources/index.rst.txt +++ b/5/_sources/index.rst.txt @@ -20,57 +20,73 @@ Where to go now? Spyder's documentation provides a variety of resources that will help you learn how to use the application and explore each one of its panes. These include video tutorials, in-depth descriptions and how-to guides covering a wide range of needs and experience levels with Spyder. -.. panels:: - :container: container-lg pb-3 px-md-0 px-5 - :column: col-lg-4 col-md-6 col-sm-6 col-xs-12 p-2 +.. grid:: 1 2 3 3 + :gutter: 3 - .. div:: align-center + .. grid-item-card:: - .. rst-class:: fasb fa-book-open + .. div:: align-center - .. div:: align-center + .. rst-class:: fasb fa-book-open - If you are looking for a summary of its features and interface, check out the :doc:`quickstart`. - --- - .. div:: align-center + .. div:: align-center - .. rst-class:: fasb fa-download + If you are looking for a summary of its features and interface, check out the :doc:`quickstart`. - .. div:: align-center - If you don't have Spyder installed and want to get started, follow the :doc:`/installation`. - --- - .. div:: align-center + .. grid-item-card:: - .. rst-class:: fasb fa-walking + .. div:: align-center - .. div:: align-center + .. rst-class:: fasb fa-download - If you are completely new to Spyder, watch our basic tutorial series, :doc:`videos/first-steps-with-spyder`. - --- - .. div:: align-center + .. div:: align-center - .. rst-class:: fasb fa-columns + If you don't have Spyder installed and want to get started, follow the :doc:`/installation`. - .. div:: align-center - If you are familiar with Spyder and want to explore the functionality of its panes in more detail, go to :doc:`panes/index`. - --- - .. div:: align-center + .. grid-item-card:: - .. rst-class:: fasb fa-first-aid + .. div:: align-center - .. div:: align-center + .. rst-class:: fasb fa-walking - If you've run into a Spyder problem and need help solving it, take a look at our :doc:`troubleshooting guide`. - --- - .. div:: align-center + .. div:: align-center - .. rst-class:: fasb fa-question-circle + If you are completely new to Spyder, watch our basic tutorial series, :doc:`videos/first-steps-with-spyder`. - .. div:: align-center - If you have a question about Spyder, visit the :doc:`faq` section. + .. grid-item-card:: + + .. div:: align-center + + .. rst-class:: fasb fa-columns + + .. div:: align-center + + If you are familiar with Spyder and want to explore the functionality of its panes in more detail, go to :doc:`panes/index`. + + + .. grid-item-card:: + + .. div:: align-center + + .. rst-class:: fasb fa-first-aid + + .. div:: align-center + + If you've run into a Spyder problem and need help solving it, take a look at our :doc:`troubleshooting guide`. + + + .. grid-item-card:: + + .. div:: align-center + + .. rst-class:: fasb fa-question-circle + + .. div:: align-center + + If you have a question about Spyder, visit the :doc:`faq` section. @@ -138,12 +154,11 @@ Connect with Spyder through our social media channels to stay up to date with ou :maxdepth: 2 :hidden: - Welcome quickstart installation + FAQ videos/index panes/index plugins/index - troubleshooting/index workshops/index - FAQ + troubleshooting/index diff --git a/5/_sources/installation.rst.txt b/5/_sources/installation.rst.txt index 6ad83daad..0c9e76c11 100644 --- a/5/_sources/installation.rst.txt +++ b/5/_sources/installation.rst.txt @@ -1,8 +1,8 @@ .. _install-guide: -################## -Installation Guide -################## +############# +Install Guide +############# Spyder is relatively easy to install on Windows, Linux and macOS. Just make sure to read and follow these instructions with care. diff --git a/5/_sources/panes/index.rst.txt b/5/_sources/panes/index.rst.txt index f2b0867c1..24f3561c2 100644 --- a/5/_sources/panes/index.rst.txt +++ b/5/_sources/panes/index.rst.txt @@ -1,6 +1,6 @@ -============== -Panes in Depth -============== +===== +Panes +===== .. toctree:: :maxdepth: 2 diff --git a/5/_sources/plugins/index.rst.txt b/5/_sources/plugins/index.rst.txt index 3e569e886..a59b3493d 100644 --- a/5/_sources/plugins/index.rst.txt +++ b/5/_sources/plugins/index.rst.txt @@ -1,6 +1,6 @@ -============== -Spyder Plugins -============== +======= +Plugins +======= .. toctree:: :maxdepth: 2 diff --git a/5/_sources/quickstart.rst.txt b/5/_sources/quickstart.rst.txt index 7defb321c..c7d9e74ec 100644 --- a/5/_sources/quickstart.rst.txt +++ b/5/_sources/quickstart.rst.txt @@ -1,6 +1,6 @@ -########## -Quickstart -########## +#### +Tour +#### Welcome to our Quickstart! Here you will find an interactive tour that will guide you through Spyder's interface. @@ -10,15 +10,15 @@ Finally, you'll get to walk through some of Spyder's key panes and functionality .. raw:: html
- - - - - - - - - + + + + + + + + + diff --git a/5/_sources/videos/index.rst.txt b/5/_sources/videos/index.rst.txt index 8deb0a457..c18dbe523 100644 --- a/5/_sources/videos/index.rst.txt +++ b/5/_sources/videos/index.rst.txt @@ -1,6 +1,6 @@ -============ -Intro Videos -============ +========= +Tutorials +========= .. toctree:: :maxdepth: 2 diff --git a/5/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css b/5/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css new file mode 100644 index 000000000..eb19f698a --- /dev/null +++ b/5/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}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/5/_sphinx_design_static/design-tabs.js b/5/_sphinx_design_static/design-tabs.js new file mode 100644 index 000000000..36b38cf0d --- /dev/null +++ b/5/_sphinx_design_static/design-tabs.js @@ -0,0 +1,27 @@ +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/5/_static/basic.css b/5/_static/basic.css index 5d8ae085a..2af6139e6 100644 --- a/5/_static/basic.css +++ b/5/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -130,7 +130,7 @@ ul.search li a { font-weight: bold; } -ul.search li div.context { +ul.search li p.context { color: #888; margin: 2px 0 0 30px; text-align: left; @@ -222,7 +222,7 @@ table.modindextable td { /* -- general body styles --------------------------------------------------- */ div.body { - min-width: 450px; + min-width: 360px; max-width: 800px; } @@ -237,14 +237,8 @@ a.headerlink { visibility: hidden; } -a.brackets:before, -span.brackets > a:before{ - content: "["; -} - -a.brackets:after, -span.brackets > a:after { - content: "]"; +a:visited { + color: #551A8B; } h1:hover > a.headerlink, @@ -335,12 +329,16 @@ 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; @@ -379,6 +377,8 @@ div.body p.centered { 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; @@ -386,6 +386,8 @@ div.admonition > :last-child { div.sidebar::after, aside.sidebar::after, +nav.contents::after, +aside.topic::after, div.topic::after, div.admonition::after, blockquote::after { @@ -428,10 +430,6 @@ table.docutils td, table.docutils th { border-bottom: 1px solid #aaa; } -table.footnote td, table.footnote th { - border: 0 !important; -} - th { text-align: left; padding-right: 5px; @@ -508,6 +506,63 @@ 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 ----------------------------------------------------- */ @@ -558,19 +613,26 @@ ul.simple p { margin-bottom: 0; } -dl.footnote > dt, -dl.citation > dt { +aside.footnote > span, +div.citation > span { float: left; - margin-right: 0.5em; } - -dl.footnote > dd, -dl.citation > dd { +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; } - -dl.footnote > dd:after, -dl.citation > dd:after { +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { content: ""; clear: both; } @@ -587,10 +649,6 @@ dl.field-list > dt { padding-right: 5px; } -dl.field-list > dt:after { - content: ":"; -} - dl.field-list > dd { padding-left: 0.5em; margin-top: 0em; @@ -616,6 +674,16 @@ dd { 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; @@ -634,14 +702,6 @@ dl.glossary dt { font-size: 1.1em; } -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - .versionmodified { font-style: italic; } @@ -682,8 +742,9 @@ dl.glossary dt { .classifier:before { font-style: normal; - margin: 0.5em; + margin: 0 0.5em; content: ":"; + display: inline-block; } abbr, acronym { @@ -691,6 +752,14 @@ abbr, acronym { cursor: help; } +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + /* -- code displays --------------------------------------------------------- */ pre { @@ -707,6 +776,7 @@ span.pre { -ms-hyphens: none; -webkit-hyphens: none; hyphens: none; + white-space: nowrap; } div[class*="highlight-"] { @@ -770,8 +840,12 @@ div.code-block-caption code { table.highlighttable td.linenos, span.linenos, -div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */ - user-select: none; +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 { @@ -786,16 +860,6 @@ div.literal-block-wrapper { margin: 1em 0; } -code.descname { - background-color: transparent; - font-weight: bold; - font-size: 1.2em; -} - -code.descclassname { - background-color: transparent; -} - code.xref, a code { background-color: transparent; font-weight: bold; diff --git a/5/_static/css/custom_styles.css b/5/_static/css/custom_styles.css index 65c80f207..6ba61377d 100644 --- a/5/_static/css/custom_styles.css +++ b/5/_static/css/custom_styles.css @@ -7,6 +7,10 @@ strong { /* Center all images by default */ +section img { + margin-bottom: 1rem; +} + .section img:not([class]) { display: block; margin-left: auto; @@ -45,8 +49,8 @@ strong { /* Ensure FA icons applied to section divs display inline */ -div.fasb h3, -div.fabb h3 { +section.fasb h3, +section.fabb h3 { display: inline-block; } @@ -81,19 +85,19 @@ iframe { /*** Custom colors for specific FA icons in the index page ***/ -div.fa-laptop-code::before { +section.fa-laptop-code::before { color: #4e4e4e; } -div.fa-book::before { +section.fa-book::before { color: #6a3514; } -div.fa-globe-americas::before { +section.fa-globe-americas::before { color: #1c4489; } -div.fa-user-friends::before { +section.fa-user-friends::before { color: #f6951f; } @@ -105,7 +109,7 @@ div.fa-user-friends::before { width: 1.3em; } -div.openteams-icon::before { +section.openteams-icon::before { margin-right: 0; padding-bottom: 0; } @@ -201,27 +205,11 @@ a[href="#join-our-community"] + ul li.toc-h3 { display: none; } -/* Version selector and header */ +/* Version selector using PyData Sphinx Theme features */ -#versions-header { - color: rgb(0 0 0 / 65%); - font-size: 0.8rem; - margin-top: 1.1rem; - text-transform: uppercase; -} - -#select-versions { - background-color: transparent; - border: 1px solid rgb(0 0 0 / 15%); - color: rgb(0 0 0 / 65%); - font-size: 90%; - margin-bottom: 7px; - padding: 2px; -} - -#select-versions, -#select-versions option { - width: 98%; +/* stylelint-disable-next-line selector-class-pattern -- Third party class using BEM */ +.version-switcher__button { + margin-bottom: 0 !important; } /*** Styles for video transcript dropdown elements ***/ @@ -352,13 +340,3 @@ a.dropdown-link:focus { color: #fff; text-decoration: none; } - -/* Temporary fix for invisible heading :before blocking clicks */ - -h2::before, -h3::before, -h4::before, -h5::before, -h6::before { - pointer-events: none; -} diff --git a/5/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css b/5/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css new file mode 100644 index 000000000..eb19f698a --- /dev/null +++ b/5/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}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/5/_static/design-tabs.js b/5/_static/design-tabs.js new file mode 100644 index 000000000..36b38cf0d --- /dev/null +++ b/5/_static/design-tabs.js @@ -0,0 +1,27 @@ +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/5/_static/doctools.js b/5/_static/doctools.js index 61ac9d266..4d67807d1 100644 --- a/5/_static/doctools.js +++ b/5/_static/doctools.js @@ -2,320 +2,155 @@ * doctools.js * ~~~~~~~~~~~ * - * Sphinx JavaScript utilities for all documentation. + * Base JavaScript utilities for all Sphinx HTML documentation. * - * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ - -/** - * select a different prefix for underscore - */ -$u = _.noConflict(); - -/** - * make the code below compatible with browsers without - * an installed firebug like debugger -if (!window.console || !console.firebug) { - var names = ["log", "debug", "info", "warn", "error", "assert", "dir", - "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", - "profile", "profileEnd"]; - window.console = {}; - for (var i = 0; i < names.length; ++i) - window.console[names[i]] = function() {}; -} - */ - -/** - * small helper function to urldecode strings - * - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL - */ -jQuery.urldecode = function(x) { - if (!x) { - return x - } - return decodeURIComponent(x.replace(/\+/g, ' ')); -}; - -/** - * small helper function to urlencode strings - */ -jQuery.urlencode = encodeURIComponent; - -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s === 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; +"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); } - return result; }; -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node, addItems) { - if (node.nodeType === 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && - !jQuery(node.parentNode).hasClass(className) && - !jQuery(node.parentNode).hasClass("nohighlight")) { - var span; - var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.className = className; - } - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - if (isInSVG) { - var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - var bbox = node.parentElement.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute('class', className); - addItems.push({ - "parent": node.parentNode, - "target": rect}); - } - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this, addItems); - }); - } - } - var addItems = []; - var result = this.each(function() { - highlight(this, addItems); - }); - for (var i = 0; i < addItems.length; ++i) { - jQuery(addItems[i].parent).before(addItems[i].target); - } - return result; -}; - -/* - * backward compatibility for jQuery.browser - * This will be supported until firefox bug is fixed. - */ -if (!jQuery.browser) { - jQuery.uaMatch = function(ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - }; - jQuery.browser = {}; - jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; -} - /** * Small JavaScript module for the documentation. */ -var Documentation = { - - init : function() { - this.fixFirefoxAnchorBug(); - this.highlightSearchWords(); - this.initIndexTable(); - if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { - this.initOnKeyListeners(); - } +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); }, /** * i18n support */ - TRANSLATIONS : {}, - PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, - LOCALE : 'unknown', + 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 : function(string) { - var translated = Documentation.TRANSLATIONS[string]; - if (typeof translated === 'undefined') - return string; - return (typeof translated === 'string') ? translated : translated[0]; + 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 : function(singular, plural, n) { - var translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated === 'undefined') - return (n == 1) ? singular : plural; - return translated[Documentation.PLURALEXPR(n)]; + 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 : function(catalog) { - for (var key in catalog.messages) - this.TRANSLATIONS[key] = catalog.messages[key]; - this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); - this.LOCALE = catalog.locale; + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; }, /** - * add context elements like header anchor links + * helper function to focus on search bar */ - addContextElements : function() { - $('div[id] > :header:first').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this headline')). - appendTo(this); - }); - $('dt[id]').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this definition')). - appendTo(this); - }); + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); }, /** - * workaround a firefox stupidity - * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + * Initialise the domain index toggle buttons */ - fixFirefoxAnchorBug : function() { - if (document.location.hash && $.browser.mozilla) - window.setTimeout(function() { - document.location.href += ''; - }, 10); - }, - - /** - * highlight the search words provided in the url in the text - */ - highlightSearchWords : function() { - var params = $.getQueryParameters(); - var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; - if (terms.length) { - var body = $('div.body'); - if (!body.length) { - body = $('body'); + 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 = "")); } - window.setTimeout(function() { - $.each(terms, function() { - body.highlightText(this.toLowerCase(), 'highlighted'); - }); - }, 10); - $('') - .appendTo($('#searchbox')); - } - }, - - /** - * init the domain index toggle buttons - */ - initIndexTable : function() { - var togglers = $('img.toggler').click(function() { - var src = $(this).attr('src'); - var idnum = $(this).attr('id').substr(7); - $('tr.cg-' + idnum).toggle(); - if (src.substr(-9) === 'minus.png') - $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); - else - $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); - }).css('display', ''); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { - togglers.click(); - } - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords : function() { - $('#searchbox .highlight-link').fadeOut(300); - $('span.highlighted').removeClass('highlighted'); - }, - - /** - * make the url absolute - */ - makeURL : function(relativeURL) { - return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; - }, + }; - /** - * get the current relative url - */ - getCurrentURL : function() { - var path = document.location.pathname; - var parts = path.split(/\//); - $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { - if (this === '..') - parts.pop(); - }); - var url = parts.join('/'); - return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + 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: function() { - $(document).keydown(function(event) { - var activeElementType = document.activeElement.tagName; - // don't navigate when in search box, textarea, dropdown or button - if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' - && activeElementType !== 'BUTTON' && !event.altKey && !event.ctrlKey && !event.metaKey - && !event.shiftKey) { - switch (event.keyCode) { - case 37: // left - var prevHref = $('link[rel="prev"]').prop('href'); - if (prevHref) { - window.location.href = prevHref; - return false; + 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(); } - case 39: // right - var nextHref = $('link[rel="next"]').prop('href'); - if (nextHref) { - window.location.href = nextHref; - return false; + 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 -_ = Documentation.gettext; +const _ = Documentation.gettext; -$(document).ready(function() { - Documentation.init(); -}); +_ready(Documentation.init); diff --git a/5/_static/documentation_options.js b/5/_static/documentation_options.js index 7bc69bdcc..3868aca0f 100644 --- a/5/_static/documentation_options.js +++ b/5/_static/documentation_options.js @@ -1,12 +1,13 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), +const DOCUMENTATION_OPTIONS = { VERSION: '5', - LANGUAGE: 'None', + LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', FILE_SUFFIX: '.html', LINK_SUFFIX: '.html', HAS_SOURCE: true, SOURCELINK_SUFFIX: '.txt', - NAVIGATION_WITH_KEYS: false + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, }; \ No newline at end of file diff --git a/5/_static/images/spyder_logo.svg b/5/_static/images/spyder_logo.svg new file mode 100644 index 000000000..cb6da14ec --- /dev/null +++ b/5/_static/images/spyder_logo.svg @@ -0,0 +1,91 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/5/_static/images/tour/tour-code-analysis.png b/5/_static/images/tour/tour-code-analysis.png new file mode 100644 index 000000000..f8d39352e Binary files /dev/null and b/5/_static/images/tour/tour-code-analysis.png differ diff --git a/5/_static/images/tour/tour-context-menu.png b/5/_static/images/tour/tour-context-menu.png new file mode 100644 index 000000000..55d5364c2 Binary files /dev/null and b/5/_static/images/tour/tour-context-menu.png differ diff --git a/5/_static/images/tour/tour-default-layout-main.png b/5/_static/images/tour/tour-default-layout-main.png new file mode 100644 index 000000000..2a1d38740 Binary files /dev/null and b/5/_static/images/tour/tour-default-layout-main.png differ diff --git a/5/_static/images/tour/tour-files.png b/5/_static/images/tour/tour-files.png new file mode 100644 index 000000000..4ea031acd Binary files /dev/null and b/5/_static/images/tour/tour-files.png differ diff --git a/5/_static/images/tour/tour-find.png b/5/_static/images/tour/tour-find.png new file mode 100644 index 000000000..4bcf39f36 Binary files /dev/null and b/5/_static/images/tour/tour-find.png differ diff --git a/5/_static/images/tour/tour-options-menu.png b/5/_static/images/tour/tour-options-menu.png new file mode 100644 index 000000000..d2f6667ad Binary files /dev/null and b/5/_static/images/tour/tour-options-menu.png differ diff --git a/5/_static/images/tour/tour-plots.png b/5/_static/images/tour/tour-plots.png new file mode 100644 index 000000000..365fc1c0b Binary files /dev/null and b/5/_static/images/tour/tour-plots.png differ diff --git a/5/_static/images/tour/tour-profiler.png b/5/_static/images/tour/tour-profiler.png new file mode 100644 index 000000000..bd2afe764 Binary files /dev/null and b/5/_static/images/tour/tour-profiler.png differ diff --git a/5/_static/images/tour/tour-variable-explorer.png b/5/_static/images/tour/tour-variable-explorer.png new file mode 100644 index 000000000..d6ee27953 Binary files /dev/null and b/5/_static/images/tour/tour-variable-explorer.png differ diff --git a/5/_static/language_data.js b/5/_static/language_data.js index 863704b31..367b8ed81 100644 --- a/5/_static/language_data.js +++ b/5/_static/language_data.js @@ -5,15 +5,15 @@ * This script contains the language-specific data used by searchtools.js, * namely the list of stopwords, stemmer, scorer and splitter. * - * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ -var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"]; +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 */ +/* Non-minified version is copied as a separate JS file, if available */ /** * Porter Stemmer @@ -197,101 +197,3 @@ var Stemmer = function() { } } - - - -var splitChars = (function() { - var result = {}; - var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648, - 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702, - 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971, - 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345, - 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761, - 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823, - 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125, - 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695, - 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587, - 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141]; - var i, j, start, end; - for (i = 0; i < singles.length; i++) { - result[singles[i]] = true; - } - var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709], - [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161], - [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568], - [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807], - [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047], - [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383], - [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450], - [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547], - [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673], - [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820], - [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946], - [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023], - [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173], - [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332], - [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481], - [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718], - [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791], - [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095], - [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205], - [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687], - [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968], - [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869], - [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102], - [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271], - [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592], - [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822], - [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167], - [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959], - [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143], - [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318], - [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483], - [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101], - [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567], - [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292], - [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444], - [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783], - [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311], - [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511], - [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774], - [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071], - [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263], - [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519], - [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647], - [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967], - [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295], - [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274], - [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007], - [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381], - [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]]; - for (i = 0; i < ranges.length; i++) { - start = ranges[i][0]; - end = ranges[i][1]; - for (j = start; j <= end; j++) { - result[j] = true; - } - } - return result; -})(); - -function splitQuery(query) { - var result = []; - var start = -1; - for (var i = 0; i < query.length; i++) { - if (splitChars[query.charCodeAt(i)]) { - if (start !== -1) { - result.push(query.slice(start, i)); - start = -1; - } - } else if (start === -1) { - start = i; - } - } - if (start !== -1) { - result.push(query.slice(start)); - } - return result; -} - - diff --git a/5/_static/pygments.css b/5/_static/pygments.css index 0d49244ed..012e6a00a 100644 --- a/5/_static/pygments.css +++ b/5/_static/pygments.css @@ -1,75 +1,152 @@ -pre { line-height: 125%; } -td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } -span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } -td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -.highlight .hll { background-color: #ffffcc } -.highlight { background: #eeffcc; } -.highlight .c { color: #408090; font-style: italic } /* Comment */ -.highlight .err { border: 1px solid #FF0000 } /* Error */ -.highlight .k { color: #007020; font-weight: bold } /* Keyword */ -.highlight .o { color: #666666 } /* Operator */ -.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ -.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #007020 } /* Comment.Preproc */ -.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ -.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ -.highlight .gd { color: #A00000 } /* Generic.Deleted */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ -.highlight .gr { color: #FF0000 } /* Generic.Error */ -.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.highlight .gi { color: #00A000 } /* Generic.Inserted */ -.highlight .go { color: #333333 } /* Generic.Output */ -.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #0044DD } /* Generic.Traceback */ -.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #007020 } /* Keyword.Pseudo */ -.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #902000 } /* Keyword.Type */ -.highlight .m { color: #208050 } /* Literal.Number */ -.highlight .s { color: #4070a0 } /* Literal.String */ -.highlight .na { color: #4070a0 } /* Name.Attribute */ -.highlight .nb { color: #007020 } /* Name.Builtin */ -.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ -.highlight .no { color: #60add5 } /* Name.Constant */ -.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ -.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ -.highlight .ne { color: #007020 } /* Name.Exception */ -.highlight .nf { color: #06287e } /* Name.Function */ -.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ -.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ -.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #bb60d5 } /* Name.Variable */ -.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mb { color: #208050 } /* Literal.Number.Bin */ -.highlight .mf { color: #208050 } /* Literal.Number.Float */ -.highlight .mh { color: #208050 } /* Literal.Number.Hex */ -.highlight .mi { color: #208050 } /* Literal.Number.Integer */ -.highlight .mo { color: #208050 } /* Literal.Number.Oct */ -.highlight .sa { color: #4070a0 } /* Literal.String.Affix */ -.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ -.highlight .sc { color: #4070a0 } /* Literal.String.Char */ -.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */ -.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ -.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ -.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ -.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ -.highlight .sx { color: #c65d09 } /* Literal.String.Other */ -.highlight .sr { color: #235388 } /* Literal.String.Regex */ -.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ -.highlight .ss { color: #517918 } /* Literal.String.Symbol */ -.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ -.highlight .fm { color: #06287e } /* Name.Function.Magic */ -.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ -.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ -.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ -.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */ -.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file +html[data-theme="light"] .highlight pre { line-height: 125%; } +html[data-theme="light"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight .hll { background-color: #fae4c2 } +html[data-theme="light"] .highlight { background: #fefefe; color: #080808 } +html[data-theme="light"] .highlight .c { color: #515151 } /* Comment */ +html[data-theme="light"] .highlight .err { color: #a12236 } /* Error */ +html[data-theme="light"] .highlight .k { color: #6730c5 } /* Keyword */ +html[data-theme="light"] .highlight .l { color: #7f4707 } /* Literal */ +html[data-theme="light"] .highlight .n { color: #080808 } /* Name */ +html[data-theme="light"] .highlight .o { color: #00622f } /* Operator */ +html[data-theme="light"] .highlight .p { color: #080808 } /* Punctuation */ +html[data-theme="light"] .highlight .ch { color: #515151 } /* Comment.Hashbang */ +html[data-theme="light"] .highlight .cm { color: #515151 } /* Comment.Multiline */ +html[data-theme="light"] .highlight .cp { color: #515151 } /* Comment.Preproc */ +html[data-theme="light"] .highlight .cpf { color: #515151 } /* Comment.PreprocFile */ +html[data-theme="light"] .highlight .c1 { color: #515151 } /* Comment.Single */ +html[data-theme="light"] .highlight .cs { color: #515151 } /* Comment.Special */ +html[data-theme="light"] .highlight .gd { color: #005b82 } /* Generic.Deleted */ +html[data-theme="light"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="light"] .highlight .gh { color: #005b82 } /* Generic.Heading */ +html[data-theme="light"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="light"] .highlight .gu { color: #005b82 } /* Generic.Subheading */ +html[data-theme="light"] .highlight .kc { color: #6730c5 } /* Keyword.Constant */ +html[data-theme="light"] .highlight .kd { color: #6730c5 } /* Keyword.Declaration */ +html[data-theme="light"] .highlight .kn { color: #6730c5 } /* Keyword.Namespace */ +html[data-theme="light"] .highlight .kp { color: #6730c5 } /* Keyword.Pseudo */ +html[data-theme="light"] .highlight .kr { color: #6730c5 } /* Keyword.Reserved */ +html[data-theme="light"] .highlight .kt { color: #7f4707 } /* Keyword.Type */ +html[data-theme="light"] .highlight .ld { color: #7f4707 } /* Literal.Date */ +html[data-theme="light"] .highlight .m { color: #7f4707 } /* Literal.Number */ +html[data-theme="light"] .highlight .s { color: #00622f } /* Literal.String */ +html[data-theme="light"] .highlight .na { color: #912583 } /* Name.Attribute */ +html[data-theme="light"] .highlight .nb { color: #7f4707 } /* Name.Builtin */ +html[data-theme="light"] .highlight .nc { color: #005b82 } /* Name.Class */ +html[data-theme="light"] .highlight .no { color: #005b82 } /* Name.Constant */ +html[data-theme="light"] .highlight .nd { color: #7f4707 } /* Name.Decorator */ +html[data-theme="light"] .highlight .ni { color: #00622f } /* Name.Entity */ +html[data-theme="light"] .highlight .ne { color: #6730c5 } /* Name.Exception */ +html[data-theme="light"] .highlight .nf { color: #005b82 } /* Name.Function */ +html[data-theme="light"] .highlight .nl { color: #7f4707 } /* Name.Label */ +html[data-theme="light"] .highlight .nn { color: #080808 } /* Name.Namespace */ +html[data-theme="light"] .highlight .nx { color: #080808 } /* Name.Other */ +html[data-theme="light"] .highlight .py { color: #005b82 } /* Name.Property */ +html[data-theme="light"] .highlight .nt { color: #005b82 } /* Name.Tag */ +html[data-theme="light"] .highlight .nv { color: #a12236 } /* Name.Variable */ +html[data-theme="light"] .highlight .ow { color: #6730c5 } /* Operator.Word */ +html[data-theme="light"] .highlight .pm { color: #080808 } /* Punctuation.Marker */ +html[data-theme="light"] .highlight .w { color: #080808 } /* Text.Whitespace */ +html[data-theme="light"] .highlight .mb { color: #7f4707 } /* Literal.Number.Bin */ +html[data-theme="light"] .highlight .mf { color: #7f4707 } /* Literal.Number.Float */ +html[data-theme="light"] .highlight .mh { color: #7f4707 } /* Literal.Number.Hex */ +html[data-theme="light"] .highlight .mi { color: #7f4707 } /* Literal.Number.Integer */ +html[data-theme="light"] .highlight .mo { color: #7f4707 } /* Literal.Number.Oct */ +html[data-theme="light"] .highlight .sa { color: #00622f } /* Literal.String.Affix */ +html[data-theme="light"] .highlight .sb { color: #00622f } /* Literal.String.Backtick */ +html[data-theme="light"] .highlight .sc { color: #00622f } /* Literal.String.Char */ +html[data-theme="light"] .highlight .dl { color: #00622f } /* Literal.String.Delimiter */ +html[data-theme="light"] .highlight .sd { color: #00622f } /* Literal.String.Doc */ +html[data-theme="light"] .highlight .s2 { color: #00622f } /* Literal.String.Double */ +html[data-theme="light"] .highlight .se { color: #00622f } /* Literal.String.Escape */ +html[data-theme="light"] .highlight .sh { color: #00622f } /* Literal.String.Heredoc */ +html[data-theme="light"] .highlight .si { color: #00622f } /* Literal.String.Interpol */ +html[data-theme="light"] .highlight .sx { color: #00622f } /* Literal.String.Other */ +html[data-theme="light"] .highlight .sr { color: #a12236 } /* Literal.String.Regex */ +html[data-theme="light"] .highlight .s1 { color: #00622f } /* Literal.String.Single */ +html[data-theme="light"] .highlight .ss { color: #005b82 } /* Literal.String.Symbol */ +html[data-theme="light"] .highlight .bp { color: #7f4707 } /* Name.Builtin.Pseudo */ +html[data-theme="light"] .highlight .fm { color: #005b82 } /* Name.Function.Magic */ +html[data-theme="light"] .highlight .vc { color: #a12236 } /* Name.Variable.Class */ +html[data-theme="light"] .highlight .vg { color: #a12236 } /* Name.Variable.Global */ +html[data-theme="light"] .highlight .vi { color: #a12236 } /* Name.Variable.Instance */ +html[data-theme="light"] .highlight .vm { color: #7f4707 } /* Name.Variable.Magic */ +html[data-theme="light"] .highlight .il { color: #7f4707 } /* Literal.Number.Integer.Long */ +html[data-theme="dark"] .highlight pre { line-height: 125%; } +html[data-theme="dark"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight .hll { background-color: #ffd9002e } +html[data-theme="dark"] .highlight { background: #2b2b2b; color: #f8f8f2 } +html[data-theme="dark"] .highlight .c { color: #ffd900 } /* Comment */ +html[data-theme="dark"] .highlight .err { color: #ffa07a } /* Error */ +html[data-theme="dark"] .highlight .k { color: #dcc6e0 } /* Keyword */ +html[data-theme="dark"] .highlight .l { color: #ffd900 } /* Literal */ +html[data-theme="dark"] .highlight .n { color: #f8f8f2 } /* Name */ +html[data-theme="dark"] .highlight .o { color: #abe338 } /* Operator */ +html[data-theme="dark"] .highlight .p { color: #f8f8f2 } /* Punctuation */ +html[data-theme="dark"] .highlight .ch { color: #ffd900 } /* Comment.Hashbang */ +html[data-theme="dark"] .highlight .cm { color: #ffd900 } /* Comment.Multiline */ +html[data-theme="dark"] .highlight .cp { color: #ffd900 } /* Comment.Preproc */ +html[data-theme="dark"] .highlight .cpf { color: #ffd900 } /* Comment.PreprocFile */ +html[data-theme="dark"] .highlight .c1 { color: #ffd900 } /* Comment.Single */ +html[data-theme="dark"] .highlight .cs { color: #ffd900 } /* Comment.Special */ +html[data-theme="dark"] .highlight .gd { color: #00e0e0 } /* Generic.Deleted */ +html[data-theme="dark"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="dark"] .highlight .gh { color: #00e0e0 } /* Generic.Heading */ +html[data-theme="dark"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="dark"] .highlight .gu { color: #00e0e0 } /* Generic.Subheading */ +html[data-theme="dark"] .highlight .kc { color: #dcc6e0 } /* Keyword.Constant */ +html[data-theme="dark"] .highlight .kd { color: #dcc6e0 } /* Keyword.Declaration */ +html[data-theme="dark"] .highlight .kn { color: #dcc6e0 } /* Keyword.Namespace */ +html[data-theme="dark"] .highlight .kp { color: #dcc6e0 } /* Keyword.Pseudo */ +html[data-theme="dark"] .highlight .kr { color: #dcc6e0 } /* Keyword.Reserved */ +html[data-theme="dark"] .highlight .kt { color: #ffd900 } /* Keyword.Type */ +html[data-theme="dark"] .highlight .ld { color: #ffd900 } /* Literal.Date */ +html[data-theme="dark"] .highlight .m { color: #ffd900 } /* Literal.Number */ +html[data-theme="dark"] .highlight .s { color: #abe338 } /* Literal.String */ +html[data-theme="dark"] .highlight .na { color: #ffd900 } /* Name.Attribute */ +html[data-theme="dark"] .highlight .nb { color: #ffd900 } /* Name.Builtin */ +html[data-theme="dark"] .highlight .nc { color: #00e0e0 } /* Name.Class */ +html[data-theme="dark"] .highlight .no { color: #00e0e0 } /* Name.Constant */ +html[data-theme="dark"] .highlight .nd { color: #ffd900 } /* Name.Decorator */ +html[data-theme="dark"] .highlight .ni { color: #abe338 } /* Name.Entity */ +html[data-theme="dark"] .highlight .ne { color: #dcc6e0 } /* Name.Exception */ +html[data-theme="dark"] .highlight .nf { color: #00e0e0 } /* Name.Function */ +html[data-theme="dark"] .highlight .nl { color: #ffd900 } /* Name.Label */ +html[data-theme="dark"] .highlight .nn { color: #f8f8f2 } /* Name.Namespace */ +html[data-theme="dark"] .highlight .nx { color: #f8f8f2 } /* Name.Other */ +html[data-theme="dark"] .highlight .py { color: #00e0e0 } /* Name.Property */ +html[data-theme="dark"] .highlight .nt { color: #00e0e0 } /* Name.Tag */ +html[data-theme="dark"] .highlight .nv { color: #ffa07a } /* Name.Variable */ +html[data-theme="dark"] .highlight .ow { color: #dcc6e0 } /* Operator.Word */ +html[data-theme="dark"] .highlight .pm { color: #f8f8f2 } /* Punctuation.Marker */ +html[data-theme="dark"] .highlight .w { color: #f8f8f2 } /* Text.Whitespace */ +html[data-theme="dark"] .highlight .mb { color: #ffd900 } /* Literal.Number.Bin */ +html[data-theme="dark"] .highlight .mf { color: #ffd900 } /* Literal.Number.Float */ +html[data-theme="dark"] .highlight .mh { color: #ffd900 } /* Literal.Number.Hex */ +html[data-theme="dark"] .highlight .mi { color: #ffd900 } /* Literal.Number.Integer */ +html[data-theme="dark"] .highlight .mo { color: #ffd900 } /* Literal.Number.Oct */ +html[data-theme="dark"] .highlight .sa { color: #abe338 } /* Literal.String.Affix */ +html[data-theme="dark"] .highlight .sb { color: #abe338 } /* Literal.String.Backtick */ +html[data-theme="dark"] .highlight .sc { color: #abe338 } /* Literal.String.Char */ +html[data-theme="dark"] .highlight .dl { color: #abe338 } /* Literal.String.Delimiter */ +html[data-theme="dark"] .highlight .sd { color: #abe338 } /* Literal.String.Doc */ +html[data-theme="dark"] .highlight .s2 { color: #abe338 } /* Literal.String.Double */ +html[data-theme="dark"] .highlight .se { color: #abe338 } /* Literal.String.Escape */ +html[data-theme="dark"] .highlight .sh { color: #abe338 } /* Literal.String.Heredoc */ +html[data-theme="dark"] .highlight .si { color: #abe338 } /* Literal.String.Interpol */ +html[data-theme="dark"] .highlight .sx { color: #abe338 } /* Literal.String.Other */ +html[data-theme="dark"] .highlight .sr { color: #ffa07a } /* Literal.String.Regex */ +html[data-theme="dark"] .highlight .s1 { color: #abe338 } /* Literal.String.Single */ +html[data-theme="dark"] .highlight .ss { color: #00e0e0 } /* Literal.String.Symbol */ +html[data-theme="dark"] .highlight .bp { color: #ffd900 } /* Name.Builtin.Pseudo */ +html[data-theme="dark"] .highlight .fm { color: #00e0e0 } /* Name.Function.Magic */ +html[data-theme="dark"] .highlight .vc { color: #ffa07a } /* Name.Variable.Class */ +html[data-theme="dark"] .highlight .vg { color: #ffa07a } /* Name.Variable.Global */ +html[data-theme="dark"] .highlight .vi { color: #ffa07a } /* Name.Variable.Instance */ +html[data-theme="dark"] .highlight .vm { color: #ffd900 } /* Name.Variable.Magic */ +html[data-theme="dark"] .highlight .il { color: #ffd900 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/5/_static/scripts/bootstrap.js b/5/_static/scripts/bootstrap.js new file mode 100644 index 000000000..c8178debb --- /dev/null +++ b/5/_static/scripts/bootstrap.js @@ -0,0 +1,3 @@ +/*! For license information please see bootstrap.js.LICENSE.txt */ +(()=>{"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{afterMain:()=>E,afterRead:()=>v,afterWrite:()=>C,applyStyles:()=>$,arrow:()=>J,auto:()=>a,basePlacements:()=>l,beforeMain:()=>y,beforeRead:()=>_,beforeWrite:()=>A,bottom:()=>s,clippingParents:()=>d,computeStyles:()=>it,createPopper:()=>Dt,createPopperBase:()=>St,createPopperLite:()=>$t,detectOverflow:()=>_t,end:()=>h,eventListeners:()=>st,flip:()=>bt,hide:()=>wt,left:()=>r,main:()=>w,modifierPhases:()=>O,offset:()=>Et,placements:()=>g,popper:()=>f,popperGenerator:()=>Lt,popperOffsets:()=>At,preventOverflow:()=>Tt,read:()=>b,reference:()=>p,right:()=>o,start:()=>c,top:()=>n,variationPlacements:()=>m,viewport:()=>u,write:()=>T});var i={};t.r(i),t.d(i,{Alert:()=>Oe,Button:()=>ke,Carousel:()=>li,Collapse:()=>Ei,Dropdown:()=>Ki,Modal:()=>Ln,Offcanvas:()=>Kn,Popover:()=>bs,ScrollSpy:()=>Ls,Tab:()=>Js,Toast:()=>po,Tooltip:()=>fs});var n="top",s="bottom",o="right",r="left",a="auto",l=[n,s,o,r],c="start",h="end",d="clippingParents",u="viewport",f="popper",p="reference",m=l.reduce((function(t,e){return t.concat([e+"-"+c,e+"-"+h])}),[]),g=[].concat(l,[a]).reduce((function(t,e){return t.concat([e,e+"-"+c,e+"-"+h])}),[]),_="beforeRead",b="read",v="afterRead",y="beforeMain",w="main",E="afterMain",A="beforeWrite",T="write",C="afterWrite",O=[_,b,v,y,w,E,A,T,C];function x(t){return t?(t.nodeName||"").toLowerCase():null}function k(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function L(t){return t instanceof k(t).Element||t instanceof Element}function S(t){return t instanceof k(t).HTMLElement||t instanceof HTMLElement}function D(t){return"undefined"!=typeof ShadowRoot&&(t instanceof k(t).ShadowRoot||t instanceof ShadowRoot)}const $={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];S(s)&&x(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}),{});S(n)&&x(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function I(t){return t.split("-")[0]}var N=Math.max,P=Math.min,M=Math.round;function j(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function F(){return!/^((?!chrome|android).)*safari/i.test(j())}function H(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&S(t)&&(s=t.offsetWidth>0&&M(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&M(n.height)/t.offsetHeight||1);var r=(L(t)?k(t):window).visualViewport,a=!F()&&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 B(t){var e=H(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function W(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&D(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function z(t){return k(t).getComputedStyle(t)}function R(t){return["table","td","th"].indexOf(x(t))>=0}function q(t){return((L(t)?t.ownerDocument:t.document)||window.document).documentElement}function V(t){return"html"===x(t)?t:t.assignedSlot||t.parentNode||(D(t)?t.host:null)||q(t)}function Y(t){return S(t)&&"fixed"!==z(t).position?t.offsetParent:null}function K(t){for(var e=k(t),i=Y(t);i&&R(i)&&"static"===z(i).position;)i=Y(i);return i&&("html"===x(i)||"body"===x(i)&&"static"===z(i).position)?e:i||function(t){var e=/firefox/i.test(j());if(/Trident/i.test(j())&&S(t)&&"fixed"===z(t).position)return null;var i=V(t);for(D(i)&&(i=i.host);S(i)&&["html","body"].indexOf(x(i))<0;){var n=z(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Q(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function X(t,e,i){return N(t,P(e,i))}function U(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function G(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const J={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,a=t.name,c=t.options,h=i.elements.arrow,d=i.modifiersData.popperOffsets,u=I(i.placement),f=Q(u),p=[r,o].indexOf(u)>=0?"height":"width";if(h&&d){var m=function(t,e){return U("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:G(t,l))}(c.padding,i),g=B(h),_="y"===f?n:r,b="y"===f?s:o,v=i.rects.reference[p]+i.rects.reference[f]-d[f]-i.rects.popper[p],y=d[f]-i.rects.reference[f],w=K(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=X(T,O,C),k=f;i.modifiersData[a]=((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)))&&W(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Z(t){return t.split("-")[1]}var tt={top:"auto",right:"auto",bottom:"auto",left:"auto"};function et(t){var e,i=t.popper,a=t.popperRect,l=t.placement,c=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=r,C=n,O=window;if(p){var x=K(i),L="clientHeight",S="clientWidth";x===k(i)&&"static"!==z(x=q(i)).position&&"absolute"===u&&(L="scrollHeight",S="scrollWidth"),(l===n||(l===r||l===o)&&c===h)&&(C=s,y-=(g&&x===O&&O.visualViewport?O.visualViewport.height:x[L])-a.height,y*=f?1:-1),l!==r&&(l!==n&&l!==s||c!==h)||(T=o,b-=(g&&x===O&&O.visualViewport?O.visualViewport.width:x[S])-a.width,b*=f?1:-1)}var D,$=Object.assign({position:u},p&&tt),I=!0===m?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:M(i*s)/s||0,y:M(n*s)/s||0}}({x:b,y},k(i)):{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 it={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:I(e.placement),variation:Z(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,et(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,et(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 nt={passive:!0};const st={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=k(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,nt)})),a&&l.addEventListener("resize",i.update,nt),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,nt)})),a&&l.removeEventListener("resize",i.update,nt)}},data:{}};var ot={left:"right",right:"left",bottom:"top",top:"bottom"};function rt(t){return t.replace(/left|right|bottom|top/g,(function(t){return ot[t]}))}var at={start:"end",end:"start"};function lt(t){return t.replace(/start|end/g,(function(t){return at[t]}))}function ct(t){var e=k(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ht(t){return H(q(t)).left+ct(t).scrollLeft}function dt(t){var e=z(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function ut(t){return["html","body","#document"].indexOf(x(t))>=0?t.ownerDocument.body:S(t)&&dt(t)?t:ut(V(t))}function ft(t,e){var i;void 0===e&&(e=[]);var n=ut(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=k(n),r=s?[o].concat(o.visualViewport||[],dt(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(ft(V(r)))}function pt(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function mt(t,e,i){return e===u?pt(function(t,e){var i=k(t),n=q(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=F();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+ht(t),y:l}}(t,i)):L(e)?function(t,e){var i=H(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):pt(function(t){var e,i=q(t),n=ct(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=N(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=N(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ht(t),l=-n.scrollTop;return"rtl"===z(s||i).direction&&(a+=N(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(q(t)))}function gt(t){var e,i=t.reference,a=t.element,l=t.placement,d=l?I(l):null,u=l?Z(l):null,f=i.x+i.width/2-a.width/2,p=i.y+i.height/2-a.height/2;switch(d){case n:e={x:f,y:i.y-a.height};break;case s:e={x:f,y:i.y+i.height};break;case o:e={x:i.x+i.width,y:p};break;case r:e={x:i.x-a.width,y:p};break;default:e={x:i.x,y:i.y}}var m=d?Q(d):null;if(null!=m){var g="y"===m?"height":"width";switch(u){case c:e[m]=e[m]-(i[g]/2-a[g]/2);break;case h:e[m]=e[m]+(i[g]/2-a[g]/2)}}return e}function _t(t,e){void 0===e&&(e={});var i=e,r=i.placement,a=void 0===r?t.placement:r,c=i.strategy,h=void 0===c?t.strategy:c,m=i.boundary,g=void 0===m?d:m,_=i.rootBoundary,b=void 0===_?u:_,v=i.elementContext,y=void 0===v?f:v,w=i.altBoundary,E=void 0!==w&&w,A=i.padding,T=void 0===A?0:A,C=U("number"!=typeof T?T:G(T,l)),O=y===f?p:f,k=t.rects.popper,D=t.elements[E?O:y],$=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=ft(V(t)),i=["absolute","fixed"].indexOf(z(t).position)>=0&&S(t)?K(t):t;return L(i)?e.filter((function(t){return L(t)&&W(t,i)&&"body"!==x(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=mt(t,i,n);return e.top=N(s.top,e.top),e.right=P(s.right,e.right),e.bottom=P(s.bottom,e.bottom),e.left=N(s.left,e.left),e}),mt(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}(L(D)?D:D.contextElement||q(t.elements.popper),g,b,h),I=H(t.elements.reference),M=gt({reference:I,element:k,strategy:"absolute",placement:a}),j=pt(Object.assign({},k,M)),F=y===f?j:I,B={top:$.top-F.top+C.top,bottom:F.bottom-$.bottom+C.bottom,left:$.left-F.left+C.left,right:F.right-$.right+C.right},R=t.modifiersData.offset;if(y===f&&R){var Y=R[a];Object.keys(B).forEach((function(t){var e=[o,s].indexOf(t)>=0?1:-1,i=[n,s].indexOf(t)>=0?"y":"x";B[t]+=Y[i]*e}))}return B}const bt={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,h=t.name;if(!e.modifiersData[h]._skip){for(var d=i.mainAxis,u=void 0===d||d,f=i.altAxis,p=void 0===f||f,_=i.fallbackPlacements,b=i.padding,v=i.boundary,y=i.rootBoundary,w=i.altBoundary,E=i.flipVariations,A=void 0===E||E,T=i.allowedAutoPlacements,C=e.options.placement,O=I(C),x=_||(O!==C&&A?function(t){if(I(t)===a)return[];var e=rt(t);return[lt(t),e,lt(e)]}(C):[rt(C)]),k=[C].concat(x).reduce((function(t,i){return t.concat(I(i)===a?function(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,c=i.allowedAutoPlacements,h=void 0===c?g:c,d=Z(n),u=d?a?m:m.filter((function(t){return Z(t)===d})):l,f=u.filter((function(t){return h.indexOf(t)>=0}));0===f.length&&(f=u);var p=f.reduce((function(e,i){return e[i]=_t(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[I(i)],e}),{});return Object.keys(p).sort((function(t,e){return p[t]-p[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,$=!0,N=k[0],P=0;P=0,B=H?"width":"height",W=_t(e,{placement:M,boundary:v,rootBoundary:y,altBoundary:w,padding:b}),z=H?F?o:r:F?s:n;L[B]>S[B]&&(z=rt(z));var R=rt(z),q=[];if(u&&q.push(W[j]<=0),p&&q.push(W[z]<=0,W[R]<=0),q.every((function(t){return t}))){N=M,$=!1;break}D.set(M,q)}if($)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 vt(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 yt(t){return[n,o,s,r].some((function(e){return t[e]>=0}))}const wt={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=_t(e,{elementContext:"reference"}),a=_t(e,{altBoundary:!0}),l=vt(r,n),c=vt(a,s,o),h=yt(l),d=yt(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})}},Et={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,s=t.name,a=i.offset,l=void 0===a?[0,0]:a,c=g.reduce((function(t,i){return t[i]=function(t,e,i){var s=I(t),a=[r,n].indexOf(s)>=0?-1:1,l="function"==typeof i?i(Object.assign({},e,{placement:t})):i,c=l[0],h=l[1];return c=c||0,h=(h||0)*a,[r,o].indexOf(s)>=0?{x:h,y:c}:{x:c,y:h}}(i,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[s]=c}},At={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=gt({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},Tt={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,a=t.name,l=i.mainAxis,h=void 0===l||l,d=i.altAxis,u=void 0!==d&&d,f=i.boundary,p=i.rootBoundary,m=i.altBoundary,g=i.padding,_=i.tether,b=void 0===_||_,v=i.tetherOffset,y=void 0===v?0:v,w=_t(e,{boundary:f,rootBoundary:p,padding:g,altBoundary:m}),E=I(e.placement),A=Z(e.placement),T=!A,C=Q(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),$=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,M={x:0,y:0};if(x){if(h){var j,F="y"===C?n:r,H="y"===C?s:o,W="y"===C?"height":"width",z=x[C],R=z+w[F],q=z-w[H],V=b?-L[W]/2:0,Y=A===c?k[W]:L[W],U=A===c?-L[W]:-k[W],G=e.elements.arrow,J=b&&G?B(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[H],nt=X(0,k[W],J[W]),st=T?k[W]/2-V-nt-et-D.mainAxis:Y-nt-et-D.mainAxis,ot=T?-k[W]/2+V+nt+it+D.mainAxis:U+nt+it+D.mainAxis,rt=e.elements.arrow&&K(e.elements.arrow),at=rt?"y"===C?rt.clientTop||0:rt.clientLeft||0:0,lt=null!=(j=null==$?void 0:$[C])?j:0,ct=z+ot-lt,ht=X(b?P(R,z+st-lt-at):R,z,b?N(q,ct):q);x[C]=ht,M[C]=ht-z}if(u){var dt,ut="x"===C?n:r,ft="x"===C?s:o,pt=x[O],mt="y"===O?"height":"width",gt=pt+w[ut],bt=pt-w[ft],vt=-1!==[n,r].indexOf(E),yt=null!=(dt=null==$?void 0:$[O])?dt:0,wt=vt?gt: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=X(t,e,i);return n>i?i:n}(wt,pt,Et):X(b?wt:gt,pt,b?Et:bt);x[O]=At,M[O]=At-pt}e.modifiersData[a]=M}},requiresIfExists:["offset"]};function Ct(t,e,i){void 0===i&&(i=!1);var n,s,o=S(e),r=S(e)&&function(t){var e=t.getBoundingClientRect(),i=M(e.width)/t.offsetWidth||1,n=M(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=q(e),l=H(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==x(e)||dt(a))&&(c=(n=e)!==k(n)&&S(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:ct(n)),S(e)?((h=H(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=ht(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function Ot(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 xt={placement:"bottom",modifiers:[],strategy:"absolute"};function kt(){for(var t=arguments.length,e=new Array(t),i=0;iIt.has(t)&&It.get(t).get(e)||null,remove(t,e){if(!It.has(t))return;const i=It.get(t);i.delete(e),0===i.size&&It.delete(t)}},Pt="transitionend",Mt=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),jt=t=>{t.dispatchEvent(new Event(Pt))},Ft=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),Ht=t=>Ft(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(Mt(t)):null,Bt=t=>{if(!Ft(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},Wt=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),zt=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?zt(t.parentNode):null},Rt=()=>{},qt=t=>{t.offsetHeight},Vt=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,Yt=[],Kt=()=>"rtl"===document.documentElement.dir,Qt=t=>{var e;e=()=>{const e=Vt();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?(Yt.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of Yt)t()})),Yt.push(e)):e()},Xt=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,Ut=(t,e,i=!0)=>{if(!i)return void Xt(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(Pt,o),Xt(t))};e.addEventListener(Pt,o),setTimeout((()=>{s||jt(e)}),n)},Gt=(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))])},Jt=/[^.]*(?=\..*)\.|.*/,Zt=/\..*/,te=/::\d+$/,ee={};let ie=1;const ne={mouseenter:"mouseover",mouseleave:"mouseout"},se=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 oe(t,e){return e&&`${e}::${ie++}`||t.uidEvent||ie++}function re(t){const e=oe(t);return t.uidEvent=e,ee[e]=ee[e]||{},ee[e]}function ae(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function le(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=ue(t);return se.has(o)||(o=t),[n,s,o]}function ce(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=le(e,i,n);if(e in ne){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=re(t),c=l[a]||(l[a]={}),h=ae(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=oe(r,e.replace(Jt,"")),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 pe(s,{delegateTarget:r}),n.oneOff&&fe.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return pe(n,{delegateTarget:t}),i.oneOff&&fe.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 he(t,e,i,n,s){const o=ae(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function de(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&he(t,e,i,r.callable,r.delegationSelector)}function ue(t){return t=t.replace(Zt,""),ne[t]||t}const fe={on(t,e,i,n){ce(t,e,i,n,!1)},one(t,e,i,n){ce(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=le(e,i,n),a=r!==e,l=re(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))de(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(te,"");a&&!e.includes(s)||he(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;he(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=Vt();let s=null,o=!0,r=!0,a=!1;e!==ue(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=pe(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function pe(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 me(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 ge(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const _e={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${ge(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${ge(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]=me(t.dataset[n])}return e},getDataAttribute:(t,e)=>me(t.getAttribute(`data-bs-${ge(e)}`))};class be{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=Ft(e)?_e.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...Ft(e)?_e.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=Ft(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 ve extends be{constructor(t,e){super(),(t=Ht(t))&&(this._element=t,this._config=this._getConfig(e),Nt.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Nt.remove(this._element,this.constructor.DATA_KEY),fe.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){Ut(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return Nt.get(Ht(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.3"}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 ye=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?i.trim():null}return e?e.split(",").map((t=>Mt(t))).join(","):null},we={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=>!Wt(t)&&Bt(t)))},getSelectorFromElement(t){const e=ye(t);return e&&we.findOne(e)?e:null},getElementFromSelector(t){const e=ye(t);return e?we.findOne(e):null},getMultipleElementsFromSelector(t){const e=ye(t);return e?we.find(e):[]}},Ee=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;fe.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),Wt(this))return;const s=we.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},Ae=".bs.alert",Te=`close${Ae}`,Ce=`closed${Ae}`;class Oe extends ve{static get NAME(){return"alert"}close(){if(fe.trigger(this._element,Te).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(),fe.trigger(this._element,Ce),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Oe.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)}}))}}Ee(Oe,"close"),Qt(Oe);const xe='[data-bs-toggle="button"]';class ke extends ve{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=ke.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}fe.on(document,"click.bs.button.data-api",xe,(t=>{t.preventDefault();const e=t.target.closest(xe);ke.getOrCreateInstance(e).toggle()})),Qt(ke);const Le=".bs.swipe",Se=`touchstart${Le}`,De=`touchmove${Le}`,$e=`touchend${Le}`,Ie=`pointerdown${Le}`,Ne=`pointerup${Le}`,Pe={endCallback:null,leftCallback:null,rightCallback:null},Me={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class je extends be{constructor(t,e){super(),this._element=t,t&&je.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return Pe}static get DefaultType(){return Me}static get NAME(){return"swipe"}dispose(){fe.off(this._element,Le)}_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(),Xt(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&&Xt(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(fe.on(this._element,Ie,(t=>this._start(t))),fe.on(this._element,Ne,(t=>this._end(t))),this._element.classList.add("pointer-event")):(fe.on(this._element,Se,(t=>this._start(t))),fe.on(this._element,De,(t=>this._move(t))),fe.on(this._element,$e,(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 Fe=".bs.carousel",He=".data-api",Be="ArrowLeft",We="ArrowRight",ze="next",Re="prev",qe="left",Ve="right",Ye=`slide${Fe}`,Ke=`slid${Fe}`,Qe=`keydown${Fe}`,Xe=`mouseenter${Fe}`,Ue=`mouseleave${Fe}`,Ge=`dragstart${Fe}`,Je=`load${Fe}${He}`,Ze=`click${Fe}${He}`,ti="carousel",ei="active",ii=".active",ni=".carousel-item",si=ii+ni,oi={[Be]:Ve,[We]:qe},ri={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},ai={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class li extends ve{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=we.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===ti&&this.cycle()}static get Default(){return ri}static get DefaultType(){return ai}static get NAME(){return"carousel"}next(){this._slide(ze)}nextWhenVisible(){!document.hidden&&Bt(this._element)&&this.next()}prev(){this._slide(Re)}pause(){this._isSliding&&jt(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?fe.one(this._element,Ke,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void fe.one(this._element,Ke,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?ze:Re;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&&fe.on(this._element,Qe,(t=>this._keydown(t))),"hover"===this._config.pause&&(fe.on(this._element,Xe,(()=>this.pause())),fe.on(this._element,Ue,(()=>this._maybeEnableCycle()))),this._config.touch&&je.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of we.find(".carousel-item img",this._element))fe.on(t,Ge,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(qe)),rightCallback:()=>this._slide(this._directionToOrder(Ve)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new je(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=oi[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=we.findOne(ii,this._indicatorsElement);e.classList.remove(ei),e.removeAttribute("aria-current");const i=we.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(ei),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===ze,s=e||Gt(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>fe.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(Ye).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),qt(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(ei),i.classList.remove(ei,c,l),this._isSliding=!1,r(Ke)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return we.findOne(si,this._element)}_getItems(){return we.find(ni,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return Kt()?t===qe?Re:ze:t===qe?ze:Re}_orderToDirection(t){return Kt()?t===Re?qe:Ve:t===Re?Ve:qe}static jQueryInterface(t){return this.each((function(){const e=li.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)}))}}fe.on(document,Ze,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=we.getElementFromSelector(this);if(!e||!e.classList.contains(ti))return;t.preventDefault();const i=li.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===_e.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),fe.on(window,Je,(()=>{const t=we.find('[data-bs-ride="carousel"]');for(const e of t)li.getOrCreateInstance(e)})),Qt(li);const ci=".bs.collapse",hi=`show${ci}`,di=`shown${ci}`,ui=`hide${ci}`,fi=`hidden${ci}`,pi=`click${ci}.data-api`,mi="show",gi="collapse",_i="collapsing",bi=`:scope .${gi} .${gi}`,vi='[data-bs-toggle="collapse"]',yi={parent:null,toggle:!0},wi={parent:"(null|element)",toggle:"boolean"};class Ei extends ve{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=we.find(vi);for(const t of i){const e=we.getSelectorFromElement(t),i=we.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 yi}static get DefaultType(){return wi}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=>Ei.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(fe.trigger(this._element,hi).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(gi),this._element.classList.add(_i),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(_i),this._element.classList.add(gi,mi),this._element.style[e]="",fe.trigger(this._element,di)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(fe.trigger(this._element,ui).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,qt(this._element),this._element.classList.add(_i),this._element.classList.remove(gi,mi);for(const t of this._triggerArray){const e=we.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(_i),this._element.classList.add(gi),fe.trigger(this._element,fi)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(mi)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=Ht(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(vi);for(const e of t){const t=we.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=we.find(bi,this._config.parent);return we.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=Ei.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}fe.on(document,pi,vi,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of we.getMultipleElementsFromSelector(this))Ei.getOrCreateInstance(t,{toggle:!1}).toggle()})),Qt(Ei);const Ai="dropdown",Ti=".bs.dropdown",Ci=".data-api",Oi="ArrowUp",xi="ArrowDown",ki=`hide${Ti}`,Li=`hidden${Ti}`,Si=`show${Ti}`,Di=`shown${Ti}`,$i=`click${Ti}${Ci}`,Ii=`keydown${Ti}${Ci}`,Ni=`keyup${Ti}${Ci}`,Pi="show",Mi='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',ji=`${Mi}.${Pi}`,Fi=".dropdown-menu",Hi=Kt()?"top-end":"top-start",Bi=Kt()?"top-start":"top-end",Wi=Kt()?"bottom-end":"bottom-start",zi=Kt()?"bottom-start":"bottom-end",Ri=Kt()?"left-start":"right-start",qi=Kt()?"right-start":"left-start",Vi={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},Yi={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Ki extends ve{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=we.next(this._element,Fi)[0]||we.prev(this._element,Fi)[0]||we.findOne(Fi,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Vi}static get DefaultType(){return Yi}static get NAME(){return Ai}toggle(){return this._isShown()?this.hide():this.show()}show(){if(Wt(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!fe.trigger(this._element,Si,t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const t of[].concat(...document.body.children))fe.on(t,"mouseover",Rt);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Pi),this._element.classList.add(Pi),fe.trigger(this._element,Di,t)}}hide(){if(Wt(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(!fe.trigger(this._element,ki,t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.off(t,"mouseover",Rt);this._popper&&this._popper.destroy(),this._menu.classList.remove(Pi),this._element.classList.remove(Pi),this._element.setAttribute("aria-expanded","false"),_e.removeDataAttribute(this._menu,"popper"),fe.trigger(this._element,Li,t)}}_getConfig(t){if("object"==typeof(t=super._getConfig(t)).reference&&!Ft(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${Ai.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:Ft(this._config.reference)?t=Ht(this._config.reference):"object"==typeof this._config.reference&&(t=this._config.reference);const i=this._getPopperConfig();this._popper=Dt(t,this._menu,i)}_isShown(){return this._menu.classList.contains(Pi)}_getPlacement(){const t=this._parent;if(t.classList.contains("dropend"))return Ri;if(t.classList.contains("dropstart"))return qi;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?Bi:Hi:e?zi:Wi}_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)&&(_e.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...Xt(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=we.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>Bt(t)));i.length&&Gt(i,e,t===xi,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=Ki.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=we.find(ji);for(const i of e){const e=Ki.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=[Oi,xi].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Mi)?this:we.prev(this,Mi)[0]||we.next(this,Mi)[0]||we.findOne(Mi,t.delegateTarget.parentNode),o=Ki.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}fe.on(document,Ii,Mi,Ki.dataApiKeydownHandler),fe.on(document,Ii,Fi,Ki.dataApiKeydownHandler),fe.on(document,$i,Ki.clearMenus),fe.on(document,Ni,Ki.clearMenus),fe.on(document,$i,Mi,(function(t){t.preventDefault(),Ki.getOrCreateInstance(this).toggle()})),Qt(Ki);const Qi="backdrop",Xi="show",Ui=`mousedown.bs.${Qi}`,Gi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Ji={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Zi extends be{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Gi}static get DefaultType(){return Ji}static get NAME(){return Qi}show(t){if(!this._config.isVisible)return void Xt(t);this._append();const e=this._getElement();this._config.isAnimated&&qt(e),e.classList.add(Xi),this._emulateAnimation((()=>{Xt(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Xi),this._emulateAnimation((()=>{this.dispose(),Xt(t)}))):Xt(t)}dispose(){this._isAppended&&(fe.off(this._element,Ui),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=Ht(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),fe.on(t,Ui,(()=>{Xt(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){Ut(t,this._getElement(),this._config.isAnimated)}}const tn=".bs.focustrap",en=`focusin${tn}`,nn=`keydown.tab${tn}`,sn="backward",on={autofocus:!0,trapElement:null},rn={autofocus:"boolean",trapElement:"element"};class an extends be{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return on}static get DefaultType(){return rn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),fe.off(document,tn),fe.on(document,en,(t=>this._handleFocusin(t))),fe.on(document,nn,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,fe.off(document,tn))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=we.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===sn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?sn:"forward")}}const ln=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",cn=".sticky-top",hn="padding-right",dn="margin-right";class un{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,hn,(e=>e+t)),this._setElementAttributes(ln,hn,(e=>e+t)),this._setElementAttributes(cn,dn,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,hn),this._resetElementAttributes(ln,hn),this._resetElementAttributes(cn,dn)}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&&_e.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=_e.getDataAttribute(t,e);null!==i?(_e.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(Ft(t))e(t);else for(const i of we.find(t,this._element))e(i)}}const fn=".bs.modal",pn=`hide${fn}`,mn=`hidePrevented${fn}`,gn=`hidden${fn}`,_n=`show${fn}`,bn=`shown${fn}`,vn=`resize${fn}`,yn=`click.dismiss${fn}`,wn=`mousedown.dismiss${fn}`,En=`keydown.dismiss${fn}`,An=`click${fn}.data-api`,Tn="modal-open",Cn="show",On="modal-static",xn={backdrop:!0,focus:!0,keyboard:!0},kn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Ln extends ve{constructor(t,e){super(t,e),this._dialog=we.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new un,this._addEventListeners()}static get Default(){return xn}static get DefaultType(){return kn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||fe.trigger(this._element,_n,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(Tn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(fe.trigger(this._element,pn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Cn),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){fe.off(window,fn),fe.off(this._dialog,fn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Zi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new an({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=we.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),qt(this._element),this._element.classList.add(Cn),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,fe.trigger(this._element,bn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){fe.on(this._element,En,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),fe.on(window,vn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),fe.on(this._element,wn,(t=>{fe.one(this._element,yn,(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(Tn),this._resetAdjustments(),this._scrollBar.reset(),fe.trigger(this._element,gn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(fe.trigger(this._element,mn).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(On)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(On),this._queueCallback((()=>{this._element.classList.remove(On),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=Kt()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=Kt()?"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=Ln.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}fe.on(document,An,'[data-bs-toggle="modal"]',(function(t){const e=we.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),fe.one(e,_n,(t=>{t.defaultPrevented||fe.one(e,gn,(()=>{Bt(this)&&this.focus()}))}));const i=we.findOne(".modal.show");i&&Ln.getInstance(i).hide(),Ln.getOrCreateInstance(e).toggle(this)})),Ee(Ln),Qt(Ln);const Sn=".bs.offcanvas",Dn=".data-api",$n=`load${Sn}${Dn}`,In="show",Nn="showing",Pn="hiding",Mn=".offcanvas.show",jn=`show${Sn}`,Fn=`shown${Sn}`,Hn=`hide${Sn}`,Bn=`hidePrevented${Sn}`,Wn=`hidden${Sn}`,zn=`resize${Sn}`,Rn=`click${Sn}${Dn}`,qn=`keydown.dismiss${Sn}`,Vn={backdrop:!0,keyboard:!0,scroll:!1},Yn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Kn extends ve{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Vn}static get DefaultType(){return Yn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||fe.trigger(this._element,jn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new un).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Nn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(In),this._element.classList.remove(Nn),fe.trigger(this._element,Fn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(fe.trigger(this._element,Hn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(Pn),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(In,Pn),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new un).reset(),fe.trigger(this._element,Wn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Zi({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():fe.trigger(this._element,Bn)}:null})}_initializeFocusTrap(){return new an({trapElement:this._element})}_addEventListeners(){fe.on(this._element,qn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():fe.trigger(this._element,Bn))}))}static jQueryInterface(t){return this.each((function(){const e=Kn.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)}}))}}fe.on(document,Rn,'[data-bs-toggle="offcanvas"]',(function(t){const e=we.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),Wt(this))return;fe.one(e,Wn,(()=>{Bt(this)&&this.focus()}));const i=we.findOne(Mn);i&&i!==e&&Kn.getInstance(i).hide(),Kn.getOrCreateInstance(e).toggle(this)})),fe.on(window,$n,(()=>{for(const t of we.find(Mn))Kn.getOrCreateInstance(t).show()})),fe.on(window,zn,(()=>{for(const t of we.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&Kn.getOrCreateInstance(t).hide()})),Ee(Kn),Qt(Kn);const Qn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],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:[]},Xn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Un=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Gn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Xn.has(i)||Boolean(Un.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Jn={allowList:Qn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Zn={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},ts={entry:"(string|element|function|null)",selector:"(string|element)"};class es extends be{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Jn}static get DefaultType(){return Zn}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},ts)}_setContent(t,e,i){const n=we.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?Ft(e)?this._putElementInTemplate(Ht(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)Gn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return Xt(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const is=new Set(["sanitize","allowList","sanitizeFn"]),ns="fade",ss="show",os=".tooltip-inner",rs=".modal",as="hide.bs.modal",ls="hover",cs="focus",hs={AUTO:"auto",TOP:"top",RIGHT:Kt()?"left":"right",BOTTOM:"bottom",LEFT:Kt()?"right":"left"},ds={allowList:Qn,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"},us={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 fs extends ve{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 ds}static get DefaultType(){return us}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),fe.off(this._element.closest(rs),as,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=fe.trigger(this._element,this.constructor.eventName("show")),e=(zt(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),fe.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(ss),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.on(t,"mouseover",Rt);this._queueCallback((()=>{fe.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!fe.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(ss),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.off(t,"mouseover",Rt);this._activeTrigger.click=!1,this._activeTrigger[cs]=!1,this._activeTrigger[ls]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),fe.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(ns,ss),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(ns),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new es({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[os]: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(ns)}_isShown(){return this.tip&&this.tip.classList.contains(ss)}_createPopper(t){const e=Xt(this._config.placement,[this,t,this._element]),i=hs[e.toUpperCase()];return Dt(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 Xt(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,...Xt(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)fe.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ls?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ls?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");fe.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?cs:ls]=!0,e._enter()})),fe.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?cs:ls]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},fe.on(this._element.closest(rs),as,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=_e.getDataAttributes(this._element);for(const t of Object.keys(e))is.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:Ht(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=fs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Qt(fs);const ps=".popover-header",ms=".popover-body",gs={...fs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},_s={...fs.DefaultType,content:"(null|string|element|function)"};class bs extends fs{static get Default(){return gs}static get DefaultType(){return _s}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[ps]:this._getTitle(),[ms]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=bs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Qt(bs);const vs=".bs.scrollspy",ys=`activate${vs}`,ws=`click${vs}`,Es=`load${vs}.data-api`,As="active",Ts="[href]",Cs=".nav-link",Os=`${Cs}, .nav-item > ${Cs}, .list-group-item`,xs={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},ks={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Ls extends ve{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 xs}static get DefaultType(){return ks}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=Ht(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&&(fe.off(this._config.target,ws),fe.on(this._config.target,ws,Ts,(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=we.find(Ts,this._config.target);for(const e of t){if(!e.hash||Wt(e))continue;const t=we.findOne(decodeURI(e.hash),this._element);Bt(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(As),this._activateParents(t),fe.trigger(this._element,ys,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))we.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(As);else for(const e of we.parents(t,".nav, .list-group"))for(const t of we.prev(e,Os))t.classList.add(As)}_clearActiveClass(t){t.classList.remove(As);const e=we.find(`${Ts}.${As}`,t);for(const t of e)t.classList.remove(As)}static jQueryInterface(t){return this.each((function(){const e=Ls.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]()}}))}}fe.on(window,Es,(()=>{for(const t of we.find('[data-bs-spy="scroll"]'))Ls.getOrCreateInstance(t)})),Qt(Ls);const Ss=".bs.tab",Ds=`hide${Ss}`,$s=`hidden${Ss}`,Is=`show${Ss}`,Ns=`shown${Ss}`,Ps=`click${Ss}`,Ms=`keydown${Ss}`,js=`load${Ss}`,Fs="ArrowLeft",Hs="ArrowRight",Bs="ArrowUp",Ws="ArrowDown",zs="Home",Rs="End",qs="active",Vs="fade",Ys="show",Ks=".dropdown-toggle",Qs=`:not(${Ks})`,Xs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Us=`.nav-link${Qs}, .list-group-item${Qs}, [role="tab"]${Qs}, ${Xs}`,Gs=`.${qs}[data-bs-toggle="tab"], .${qs}[data-bs-toggle="pill"], .${qs}[data-bs-toggle="list"]`;class Js extends ve{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),fe.on(this._element,Ms,(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?fe.trigger(e,Ds,{relatedTarget:t}):null;fe.trigger(t,Is,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(qs),this._activate(we.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),fe.trigger(t,Ns,{relatedTarget:e})):t.classList.add(Ys)}),t,t.classList.contains(Vs)))}_deactivate(t,e){t&&(t.classList.remove(qs),t.blur(),this._deactivate(we.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),fe.trigger(t,$s,{relatedTarget:e})):t.classList.remove(Ys)}),t,t.classList.contains(Vs)))}_keydown(t){if(![Fs,Hs,Bs,Ws,zs,Rs].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!Wt(t)));let i;if([zs,Rs].includes(t.key))i=e[t.key===zs?0:e.length-1];else{const n=[Hs,Ws].includes(t.key);i=Gt(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Js.getOrCreateInstance(i).show())}_getChildren(){return we.find(Us,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=we.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=we.findOne(t,i);s&&s.classList.toggle(n,e)};n(Ks,qs),n(".dropdown-menu",Ys),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(qs)}_getInnerElement(t){return t.matches(Us)?t:we.findOne(Us,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Js.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}fe.on(document,Ps,Xs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),Wt(this)||Js.getOrCreateInstance(this).show()})),fe.on(window,js,(()=>{for(const t of we.find(Gs))Js.getOrCreateInstance(t)})),Qt(Js);const Zs=".bs.toast",to=`mouseover${Zs}`,eo=`mouseout${Zs}`,io=`focusin${Zs}`,no=`focusout${Zs}`,so=`hide${Zs}`,oo=`hidden${Zs}`,ro=`show${Zs}`,ao=`shown${Zs}`,lo="hide",co="show",ho="showing",uo={animation:"boolean",autohide:"boolean",delay:"number"},fo={animation:!0,autohide:!0,delay:5e3};class po extends ve{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return fo}static get DefaultType(){return uo}static get NAME(){return"toast"}show(){fe.trigger(this._element,ro).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(lo),qt(this._element),this._element.classList.add(co,ho),this._queueCallback((()=>{this._element.classList.remove(ho),fe.trigger(this._element,ao),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(fe.trigger(this._element,so).defaultPrevented||(this._element.classList.add(ho),this._queueCallback((()=>{this._element.classList.add(lo),this._element.classList.remove(ho,co),fe.trigger(this._element,oo)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(co),super.dispose()}isShown(){return this._element.classList.contains(co)}_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(){fe.on(this._element,to,(t=>this._onInteraction(t,!0))),fe.on(this._element,eo,(t=>this._onInteraction(t,!1))),fe.on(this._element,io,(t=>this._onInteraction(t,!0))),fe.on(this._element,no,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=po.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}function mo(t){"loading"!=document.readyState?t():document.addEventListener("DOMContentLoaded",t)}Ee(po),Qt(po),mo((function(){[].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')).map((function(t){return new fs(t,{delay:{show:500,hide:100}})}))})),mo((function(){document.getElementById("pst-back-to-top").addEventListener("click",(function(){document.body.scrollTop=0,document.documentElement.scrollTop=0}))})),mo((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}))})),window.bootstrap=i})(); +//# sourceMappingURL=bootstrap.js.map \ No newline at end of file diff --git a/5/_static/scripts/bootstrap.js.LICENSE.txt b/5/_static/scripts/bootstrap.js.LICENSE.txt new file mode 100644 index 000000000..28755c2c5 --- /dev/null +++ b/5/_static/scripts/bootstrap.js.LICENSE.txt @@ -0,0 +1,5 @@ +/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ diff --git a/5/_static/scripts/bootstrap.js.map b/5/_static/scripts/bootstrap.js.map new file mode 100644 index 000000000..e9e815891 --- /dev/null +++ b/5/_static/scripts/bootstrap.js.map @@ -0,0 +1 @@ +{"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.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 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};\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.3';\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 !== '#' ? hrefAttribute.trim() : null;\n }\n return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null;\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};\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};\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 dd: [],\n div: [],\n dl: [],\n dt: [],\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
- -
-
-
-

Frequently Asked Questions

-
-

Installing and updating

-
+ + -
+ - -
- -
- -
- - - - -
- -
-
-
- +
+ + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/genindex.html b/5/genindex.html index 9f69853ad..6fc5d3922 100644 --- a/5/genindex.html +++ b/5/genindex.html @@ -1,572 +1,418 @@ - - + + + Index — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+
+ +
+ + + + + +
+
- - - - - - - - - - +
- - - - - - -
- -
-
+ +
+

Index

@@ -589,124 +435,74 @@

P

-
+ -
- - -
-
- -
- -
- + + +
+ +
- -
-
+ +
+ - -
- -
+
- +
+ +
+ + + + + + + - - - - - Open chat - - - - - + \ No newline at end of file diff --git a/5/index.html b/5/index.html index a6ad29e59..bf81517e6 100644 --- a/5/index.html +++ b/5/index.html @@ -1,873 +1,644 @@ - - + + + - + + Welcome to Spyder’s Documentation — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+ +
+ +
+ + + + +
+
- - - - - - - - - - +
- - - - - -
- -
-
-
-

Welcome to Spyder’s Documentation

+ +
+ +
+

Welcome to Spyder’s Documentation#

Screenshot of the Spyder main window, with the default panel layout

Spyder is a powerful scientific environment written in Python, for Python, and designed by and for scientists, engineers and data analysts. It features a unique combination of the advanced editing, analysis, debugging, and profiling functionality of a comprehensive development tool with the data exploration, interactive execution, deep inspection, and beautiful visualization capabilities of a scientific package.

-
-

Where to go now?

+
+

Where to go now?#

Spyder’s documentation provides a variety of resources that will help you learn how to use the application and explore each one of its panes. These include video tutorials, in-depth descriptions and how-to guides covering a wide range of needs and experience levels with Spyder.

-
-
-
-
-
+
+
+
+
+
-

If you are looking for a summary of its features and interface, check out the Quickstart.

+

If you are looking for a summary of its features and interface, check out the Tour.

-
-
-
+
+
+
-

If you don’t have Spyder installed and want to get started, follow the Installation Guide.

+

If you don’t have Spyder installed and want to get started, follow the Install Guide.

-
-
-
+
+
+
-

If you are completely new to Spyder, watch our basic tutorial series, First Steps with Spyder.

+

If you are completely new to Spyder, watch our basic tutorial series, First Steps with Spyder.

-
-
-
+
+
+
-

If you are familiar with Spyder and want to explore the functionality of its panes in more detail, go to Panes in Depth.

+

If you are familiar with Spyder and want to explore the functionality of its panes in more detail, go to Panes.

-
-
-
+
+
+
-

If you’ve run into a Spyder problem and need help solving it, take a look at our troubleshooting guide.

+

If you’ve run into a Spyder problem and need help solving it, take a look at our troubleshooting guide.

-
-
-
+
+
+
-

If you have a question about Spyder, visit the Frequently Asked Questions section.

+

If you have a question about Spyder, visit the Frequently Asked Questions section.

-
-
-

Join our community

+
+
+

Join our community#

Spyder is open source software, which means that is free for everyone to use and anyone can contribute to it. We encourage everyone to become a part of our community and help develop Spyder!

-
-

Looking to contribute your code?

+
+

Looking to contribute your code?#

Spyder is written in the same Python language that you use it to develop, so its easy to get started contributing to it. You can follow our contributing guide to set up a development environment, and you can get involved with the project through our Github repository. The easiest way to get started is helping us resolve items on our issue tracker, either by fixing bugs in Spyder, or helping users troubleshoot their problems (which doesn’t require writing any code).

-
-
-

Want to help writing docs?

+
+
+

Want to help writing docs?#

We welcome your contributions of corrections, additions and enhancements to these docs. Check out the docs contributing guide to learn how to submit a PR with your changes on our docs repo.

-
-
-

Interested in translating Spyder?

+
+
+

Interested in translating Spyder?#

In order to reach more users around the world in need of a powerful scientific Python environment, we welcome your help translating the documentation and the interface into different languages.

For this purpose we use Crowdin, which provides a simple web based interface for translators, proofreaders and managers, so everyone can help us translate Spyder into any language.

-
-
-

Want to be part of our social media?

+ +
+

Want to be part of our social media?#

Connect with Spyder through our social media channels to stay up to date with our current developments!

-
-
-
+ + + -
+ -
- - Quickstart - -
- - - - +
+ + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/installation.html b/5/installation.html index 05d975aa1..2904fa419 100644 --- a/5/installation.html +++ b/5/installation.html @@ -1,620 +1,499 @@ - - + + + - - Installation Guide — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + Install Guide — Spyder 5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+
+ +
+ + + + + +
+
- - - - - - - - +
- - - - - -
- -
-
-
-

Installation Guide

+ +
+ +
+

Install Guide#

Spyder is relatively easy to install on Windows, Linux and macOS. Just make sure to read and follow these instructions with care.

If you run into problems, before posting a report, please consult our comprehensive troubleshooting guide and search the issue tracker for your error message and problem description. These methods generally fix or isolate the great majority of install-related difficulties. Thanks!

-
+

Note

For most users on Windows and macOS, we recommend our Standalone installers as the most straightforward and robust option to obtain Spyder. For users needing Linux support, third-party Spyder plugins or Variable Explorer compatibility with custom-installed packages—all capabilities which the standalone installers currently do not yet provide—we advise using a Conda-based distributions. Linux, plugin and package/environment management support in the standalone installers are currently under active development for future Spyder versions.

-
-

Try Spyder online

+
+

Try Spyder online#

Want to try out Spyder without installing it? With Binder you can work with a fully functional copy of Spyder online that runs right in your web browser, no installation needed. Visit the Spyder Binder to get started using Spyder.

Spyder running on Binder -
-
-

Standalone installers

+
+
+

Standalone installers#

The standalone installers are our recommended method for most users on Windows and macOS, with experimental Linux support under active development. They work like any other IDE, where Spyder can be installed and updated independently of the Python environments you use to run your code. This avoids the problems with incompatible packages and broken installations users often face when mixing Spyder with the (Conda, etc) environments they use to run their code.

The installers include a built-in Python environment with the most common scientific libraries (e.g. NumPy, Pandas, Matpotlib, etc), which can be used out of the box for basic data analysis tasks. However, to manage your own packages and environments, you’ll currently need to connect an external Python distribution (such as Anaconda, Miniconda, Miniforge/Mambaforge, WinPython or Python.org) to your standalone copy of Spyder. For more information on this, see our FAQ entry on the subject.

-
+

Note

The standalone installers do not yet support installing third-party Spyder plugins not already bundled with them, though this feature is currently under development. For now, if you need this capability, we recommend a Conda-based distributions.

-
-

Downloading and installing

+
+

Downloading and installing#

To download the supported Spyder installer for your platform, simply click the appropriate link below (for Linux, see the Conda-based distributions section). Then, double-click the downloaded file to open the installer. If a security warning pops up, you may need to click Yes, OK, Open, Allow or similar.

On Windows, if a “SmartScreen” dialog appears, click More info followed by Run anyway, and then proceed through the steps in the installer.

On macOS, open the disk image and drag Spyder to your Applications folder.

- ----- +
@@ -622,38 +501,39 @@

Topics

Windows

macOS M1

-
+
+

Note

“Lite” versions of both installers are also available from the releases page, which are somewhat smaller than the full installers. These lack a number of optional but recommended dependencies, such as NumPy, SciPy and Pandas, meaning that a few Variable Explorer features, including graphical data import wizards and support for rich display and editing of NumPy arrays and Pandas DataFrames, will not be available. Given this only saves a modest amount of space while missing out on significant features, we recommend using the full installers unless minimizing download/install size and memory usage is a priority.

-
-
-

Running from a standalone install

+
+
+

Running from a standalone install#

To run Spyder when installed standalone, you can simply use your operating system’s typical method of launching applications, such as opening it from the Start menu on Windows (or the Taskbar, if you’ve pinned it there), or from Launchpad, Spotlight or the Applications folder on macOS (or the Dock, if you’ve added it there).

-
-
-

Updating a standalone install

+ +
+

Updating a standalone install#

By default, Spyder checks for updates automatically on startup, and you can also check manually with Help ‣ Check for updates. The standalone installers for Spyder 5.4.0+ include update functionality built right into Spyder, which after checking for updates will display a prompt to automatically download and install the current version. On earlier versions, you’ll need to manually download and install the latest release (if on Windows, make sure to remove the old version first from Control Panel/System Settings).

-
-
-
-

Conda-based distributions

+ + +
+

Conda-based distributions#

Spyder is included by default in the Anaconda Python distribution, which comes with everything you need to get started in an all-in-one package. It can also be easily installed in the much lighter-weight Miniconda and Miniforge/Mambaforge, which include just Python and the Conda/Mamba package and environment manager by default (with Miniforge defaulting to the Conda-Forge channel, and Mambaforge using Mamba, a much faster alternative to Conda). This is our recommended installation method on Linux and for users with third-party Spyder plugins, as support for both of these in our standalone installers is still under active development.

-
-

Conda environment

+
+

Conda environment#

With Miniconda/Miniforge/Mambaforge, or to get a more reliable and up-to-date Spyder version with Anaconda, we strongly recommend installing Spyder into its own dedicated Conda environment.

-
+

Note

If using Mamba/Mambaforge, substitute mamba for conda in the following commands.

-
-

Installing with Conda

+
+

Installing with Conda#

For a full install of Spyder and all optional dependencies, run the following command in your Anaconda Prompt (Windows) or terminal:

conda create -c conda-forge -n spyder-env spyder numpy scipy pandas matplotlib sympy cython
 
@@ -671,14 +551,14 @@

Topics

Here’s a summary of the main steps.

Running Spyder installation with conda -
-
-

Running with Conda

+
+
+

Running with Conda#

You can then run Spyder by the same methods as with Anaconda, except that you need to make sure to launch the Start menu shortcut with (spyder-env) in the name, select the spyder-env environment on the left before launching it with Navigator, or type conda activate spyder-env before launching it on the command line.

See our FAQ question for more information about how to use Spyder with your existing Conda environments.

-
-
-

Updating with Conda

+
+
+

Updating with Conda#

With any Conda-based distribution and Spyder installed in its own environment (recommended), update Conda itself, active the environment, and finally update Spyder. In your system terminal (or Anaconda Prompt if on Windows), run:

conda update -n base conda
@@ -691,32 +571,32 @@ 

Topics

And then recreate a fresh one.

-
-
-
-

Anaconda base

+ + +
+

Anaconda base#

While we recommend always using a dedicated environment, with Anaconda you can also run the bundled copy of Spyder from the built-in base environment.

-
+

Caution

The bundled Spyder version can often be quite out of date, missing new features and bug fixes from the latest version, and if you install, change or remove other packages, there is a significant chance of dependency conflicts or a broken Spyder installation. Therefore, we recommend installing Spyder into a new Conda environment to avoid all these issues.

-
-

Running with Anaconda

+
+

Running with Anaconda#

To run the bundled version of Spyder after installing it with Anaconda, the recommended method on Windows is to launch it via the Start menu shortcut. On other platforms, open Anaconda Navigator, scroll to Spyder under Home and click Launch.

Anaconda Navigator showing Spyder

If Spyder does not start via this method or you prefer to use the command line, open Anaconda Prompt (Windows) or your terminal (other platforms), type conda activate base then spyder.

-
-
-

Updating with Anaconda

+
+
+

Updating with Anaconda#

With Spyder installed in Anaconda’s base environment, first update the anaconda meta-package, and then Spyder itself (in case there is a newer version than that pinned to the anaconda metapackage). In your system terminal (or Anaconda Prompt if on Windows), run:

conda update anaconda
 conda install spyder=5.4.3
 
-
+

Note

These commands also update all your other packages, which is one reason we strongly recommend you use an isolated conda environment to avoid any potential unintended effects on other installed packages.

@@ -725,19 +605,19 @@

Topics

conda install spyder
-
- - -
-

Using pip

-
+ + + +
+

Using pip#

+

Caution

While this installation method is a viable option for experienced users, installing Spyder (and other PyData-stack packages) with pip can sometimes lead to tricky issues, particularly on Windows and macOS. While you are welcome to try it on your own, we are typically not able to provide individual support for installation problems with pip, except to recommend our Standalone installers (Windows and macOS) or a Conda-based distributions.

You can install Spyder with the pip package manager, which is included by default with most Python installations. Before installing Spyder itself by this method, you need to download the Python programming language.

-
+

Note

Due to a known issue with some DEB-based Linux distributions (Debian, Ubuntu, Mint), you might also need to install the pyqt5-dev-tools package first, with sudo apt install pyqt5-dev-tools.

@@ -771,22 +651,22 @@

Topics

pip install --upgrade spyder
 
-
-
-

Alternative methods

-
+
+
+

Alternative methods#

+

Caution

While we describe alternative Spyder installation options for users who prefer them, as these are third-party distributions that we have no direct involvement in, we are usually not able to offer useful individual assistance for problems specific to installing via these alternative methods.

Also, the Spyder versions they install may be out of date relative to the current release, and thus be missing the latest features and bug fixes.

Therefore, we recommend you switch to our Standalone installers (Windows and macOS) or a Conda-based distributions if you encounter installation issues you are unable to solve on your own.

-
-

Windows

+
+

Windows#

Spyder is included in the WinPython scientific Python distribution, along with many other common numerical computing and data analysis packages. You can use Spyder immediately after installing, similar to Anaconda.

-
-
-

macOS

+
+
+

macOS#

Spyder is available as a cask through Homebrew.

To install it using the brew package manager, run:

brew install --cask spyder
@@ -797,22 +677,22 @@ 

Topics

sudo port install py39-spyder
 
-
-
-

Linux

+
+
+

Linux#

Spyder can be installed via third-party distro packages on most common Linux distributions.

Running Spyder installed this way will generally be the same as any other distro-installed application. Alternatively, it can be launched from the terminal with spyder (or spyder3, on older versions of some distros).

-
-

Ubuntu/Debian

+
+

Ubuntu/Debian#

Spyder is available as a Ubuntu package and a Debian package.

To install it using the apt package manager, run:

sudo apt install spyder
 
-
-
-

Other distributions

+
+
+

Other distributions#

Spyder is also available in other GNU/Linux distributions, including:

Please refer to the links or your distribution’s documentation for how to install Spyder.

-
-
- -
-

Development builds

+ + + +
+

Development builds#

If you want to try the next Spyder version before it is released, you can! You may want to do this for fixing bugs in Spyder, adding new features, learning how Spyder works or just getting a taste of what the IDE can do. For more information, please see the Contributing Guide included with the Spyder source or on Github, and for further detail consult the Spyder development wiki.

-
-
-

Additional help

+ +
+

Additional help#

Run in to a problem installing or running Spyder? Read our Troubleshooting Guide.

Looking for general information about Spyder and its ecosystem? See our main website.

Need to submit a bug report or feature request? Check out our Github repository.

@@ -839,281 +719,155 @@

Topics

Have a help request or discussion topic? Subscribe to our Google Group.

Asking a quick question or want to chat with the dev team? Stop by our Gitter chatroom.

Seeking personalized help from expert Spyder consultants? Visit OpenTeams.

-
- + + - + - - - - - + + + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/objects.inv b/5/objects.inv index 19a6630f2..f1c683d3a 100644 Binary files a/5/objects.inv and b/5/objects.inv differ diff --git a/5/panes/debugging.html b/5/panes/debugging.html index 47bd49009..cc850e1b4 100644 --- a/5/panes/debugging.html +++ b/5/panes/debugging.html @@ -1,581 +1,484 @@ - - + + + - + + Debugger — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+
+ +
+ + + + + +
+
- - - - - - - - +
- - - - - -
- -
-
-
-

Debugger

+ +
+ +
+

Debugger#

Debugging in Spyder is supported through integration with the enhanced ipdb debugger in the IPython Console. This allows breakpoints and the execution flow to be viewed and controlled right from the Spyder GUI, as well as with all the familiar IPython console commands.

A Spyder IPython console window, showing the ipdb debugger in action -
-

Debugging with ipdb

+
+

Debugging with ipdb#

You can fully control debugger execution from the Debug menu, Debug toolbar and via configurable keyboard shortcuts, along with the standard ipdb console commands.

A Spyder IPython console window, showing debugging from toolbar

Additionally, the Editor shows the line of code the debugger is currently stopped on with an arrow.

@@ -588,9 +491,9 @@

Debugging with ipdb

Finally, you can enter and execute multiline statements in Spyder’s debugger just like with the regular IPython prompt, to easily run complex code.

Debugger showing multiline debugger -

-
+
+

Breakpoints#

Spyder’s debugger is integrated with the Breakpoints pane, which lists the file, line, and condition (if any) of every breakpoint defined. To open it, select Debug ‣ List breakpoints, or press Ctrl-Shift-B (Cmd-Shift-B on macOS).

Spyder's Breakpoints panel, with a number of examples showing file, line number and an optional condition @@ -605,9 +508,9 @@

Debugging with ipdb

You can access and edit local and global variables at each breakpoint through the Variable Explorer.

Spyder's console and variable explorer showing local and global variables when debugging -

-
-

Advanced features

+ +
+

Advanced features#

You can avoid stepping through other Python packages while debugging by enabling the new Ignore Python libraries while debugging option in Spyder’s preferences, under IPython Console ‣ Debugger ‣ Debug. This will skip all the built-in and third-party Python modules you have installed.

Spyder's preferences showing Ignore Python libraries while debugging options @@ -618,204 +521,141 @@

Advanced featuresPreferences ‣ IPython Console ‣ Debugger ‣ Run code while debugging, and enter the code that you want to be executed with each step.

Spyder's preferenes with debugging snippet -

-
-

Matplotlib support

+ +
+

Matplotlib support#

Generating Matplotlib figures is fully supported while the debugger is active, including all the different graphics backends. Use the %matplotlib magic to change to an interactive backend (e.g. %matplotlib qt5) to pan, zoom and adjust your plots in a separate window, or switch back to the default inline (%matplotlib inline) to see them displayed right in the Plots pane.

Debugger showing matplotlib interactive backend

To avoid showing plots while debugging, deactivate the Process execute events while debugging option in Preferences ‣ IPython console ‣ Debugger.

-
- -
+ + -
+ - - - -
- -
- - - - -
- -
-
-
-
+
+ + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/panes/editor.html b/5/panes/editor.html index 56c4a9190..8c72eb5d1 100644 --- a/5/panes/editor.html +++ b/5/panes/editor.html @@ -1,582 +1,485 @@ - - + + + - + + Editor — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+
+ +
+ + + + + +
+
- - - - - - - - +
- - - - - -
- -
-
-
-

Editor

+ +
+ +
+

Editor#

Spyder’s multi-language Editor pane is the key element of the IDE, where you can create, open, and modify source files. The Editor offers a variety of core features, such as autocompletion, real-time analysis, syntax highlighting, horizontal and vertical splitting, and much more. In addition, it integrates a number of powerful tools for an easy to use, efficient editing experience.

Spyder's Editor pane, split horizontally and with style analysis -
-

Key components

+
+

Key components#

The Editor pane consists of the following areas:

Spyder's Editor pane, showing its different areas (described below)
    @@ -589,55 +492,55 @@

    Key componentsBrowse tabs button (at left) to show every open tab and switch between them—which comes in handy if many are open.

-
-
-

Interface

-
-

Tabs

+
+
+

Interface#

+
+

Tabs#

You can browse and navigate between open files in the Editor with tabs. Click the Browse tabs button on the left of the tab bar to display a list of open files, with the active tab checked.

Spyder's Editor pane, showing the tabs browser

Reorder files by dragging and dropping, or with Sort tabs alphabetically in the options menu, which also allows closing all tabs to the right of, or all tabs but the active one.

Spyder's Editor pane, showing how to browse and sort open tabs alphabetically -
-
-

File switcher

+ +
+

File switcher#

The Editor features a file switcher, which enables you to navigate and switch between multiple open files. The file switcher is helpful for locating any file when there are several files opened.

Spyder's Editor pane, showing the file switcher

It can be accessed from the File ‣ File Switcher menu or Ctrl-P, and includes a search function. You can type in any part of an open file’s name and—if exists—it can be switched to by pressing Enter.

Spyder's Editor pane, showing searching and switching to an existing file -
-
-

Split panels

+ +
+

Split panels#

The Editor can be split horizontally and vertically into as many distinct panels as desired. This allows viewing and editing the contents of several files (or different parts of the same file) at the same time.

Spyder's Editor pane, showing how to split panels

Split the Editor with the Split vertically (Ctrl-Shift-{) and Split horizontally (Ctrl-Shift--) commands in the options menu, and use Close this panel (Alt-Shift-W) to close the selected split panel.

-
+

Note

Close this panel closes a split panel, while Close hides the entire Editor pane (including all splits, which are restored when the Editor is re-opened).

-
-
-
-

Editing features

-
-

Syntax highlighting

+ + +
+

Editing features#

+
+

Syntax highlighting#

To improve the readability of your code, Spyder has a syntax highlighting feature that determines the color and style of text in the Editor, as well as in the IPython Console.

You can configure and preview syntax highlighting themes and fonts under Preferences ‣ Appearance. The Syntax highlighting theme section allows you to change the color and style of the syntax elements and background to match your preferences. You can switch between available themes in the drop-down menu, modify the selected theme, create a new theme, and more. The Fonts section lets you change the text font and size.

Spyder's Editor pane, showing how to switch between syntax highlighting themes -
+

Note

Changes made to the syntax highlighting theme and font settings are common to all source files, regardless of their language.

-
-
-

Code cells

+
+
+

Code cells#

A “code cell” in Spyder is a block of lines, typically in a script, that can be easily executed all at once in the current IPython Console. This is similar to “cell” behavior in Jupyter Notebook and MATLAB. You can divide your scripts into as many cells as needed, or none at all—the choice is yours.

@@ -651,25 +554,25 @@

Code cells% signs to the cell separator, e.g. # %%% to create a level 2 subsection, # %%%% for level 3, etc. This displays multiple levels in the Outline pane.

Spyder outline pane, showing an example of sub sections -
+

Note

This only affects how the cell is displayed in the Outline, and doesn’t affect running it in the Editor.

To run the code in a cell, use Run ‣ Run cell, the Run cell button in the toolbar or the keyboard shortcut (Ctrl-Enter/Cmd-Return by default). You can also run a cell and then jump to the next one, letting you quickly step through multiple cells, using Run ‣ Run cell and advance (Shift-Enter by default).

-
-
-

Automatic formatting

+

+
+

Automatic formatting#

The Editor has built-in support for automatically formatting your code using several popular tools, including Autopep8 and Black. The Format file or selection with {tool} command in the Source or context menu will format either the selected fragment (if text is selected) or the entire active file.

Spyder Editor pane, showing an example of code selection formatting

You can have the Editor automatically autoformat a file every time you save your work. To set this up, go to Preferences ‣ Completion and linting ‣ Code style and formatting ‣ Code formatting and check the Autoformat files on save option.

Spyder's preferences dialog, showing checking the autoformat files on save setting -
-
-
-

Running code

+ + +
+

Running code#

The Editor lets you run an entire file as well as specific lines, selections or cells.

As your code is running,

    @@ -677,99 +580,99 @@

    Running codeVariable Explorer allows you to browse and interact with the objects generated.

  • The Plots pane renders the figures and images created.

-
-

Run file

+
+

Run file#

Run an entire Editor file using the Run ‣ Run menu item, the Run file toolbar button or the F5 key. Use Run ‣ Re-Run last script to re-run the most recent file executed with the above.

-
-
-

Run line/selection

+
+
+

Run line/selection#

You can execute the current line—or multiple selected lines—using the Run selection or current line option from the toolbar or the Run menu, as well as with the F9 key. After running the current line, the cursor automatically advances to the next one, so you can step through your code line by line. Unlike Run file, the executed lines are shown in the IPython Console.

-
-
-

Run cell

+ +
+

Run cell#

To run a cell, place your cursor inside it and use the Run ‣ Run cell menu item, the Run current cell toolbar button or the Ctrl-Enter / Cmd-Return keyboard shortcut. Use Run cell and advance in the Run menu/toolbar or Shift-Enter to jump to the next cell after running, useful for stepping through cells quickly.

-
-
-

Run configuration

+ +
+

Run configuration#

You can use the Run configuration per file dialog to set each file’s working directory, console mode (current, dedicated or external), command line arguments, execution options (clear all variables, run in an existing/empty namespace, debug on error), and more.

Spyder's Editor pane, showing the Run Configuration dialog

To access it, click Run ‣ Configuration per file… or press Ctrl-F6 / Cmd-F6.

-
-
-
-

Code navigation

-
-

Find and replace

+ + +
+

Code navigation#

+
+

Find and replace#

To search for text in the current file, use Search ‣ Find text or Ctrl-F / Cmd-F, and to replace it, use Search ‣ Replace text or Ctrl-R / Cmd-R. Typing your search string in the resulting panel below the Editor highlights each result and counts the total. Navigate between matches with the Find Previous and Find Next buttons in the find/replace panel, their corresponding entries in the Search menu, or use the F2 and F3 keys. Use the .* button to process search text as a regular expression, Aa to treat it as case-sensitive and [–] to only match whole words (e.g. for data, match data() but not dataframe).

Spyder's Editor pane, showing the find and replace panel -
-
-

Go to line

+ +
+

Go to line#

The Go to line dialog allows jumping to a specific line in the active file. Open it with Search ‣ Go to line or Ctrl-L / Cmd-L, type the line number you want to scroll to and press Enter (or click OK).

Spyder's Editor pane, showing the go to line feature

It also shows the current line number and total line count in the file.

-
-
-

Class/function selector

+ +
+

Class/function selector#

This panel, activated under Source ‣ Show selector for classes and functions, displays (as applicable) the name of the cell, function/method and class the Editor cursor is located inside. Use its dropdowns to view and jump to the functions, methods and classes in the current file.

Spyder's Editor pane, showing the class and function selector panel -
-
-
-

Code analysis and completions

+ + +
+

Code analysis and completions#

Spyder uses the Language Server Protocol (LSP) to provide code completion and linting for the Editor, similar to VSCode, Neovim, and other popular editors/IDEs.

-
+

Note

Many issues with completion and linting are outside of Spyder’s control, and are either limitations with the LSP or the code that is being introspected, but some can be worked around. See Completion/help not working for troubleshooting steps.

Python is supported out of the box, and advanced users can add completion and linting support for other languages by setting up LSP servers for them under Preferences ‣ Completion and Linting ‣ Other languages.

-
-

Code completion

+
+

Code completion#

Automatic code completion as you type is enabled by default in the Editor, and can also be triggered manually with Ctrl-Space/Cmd-Space, showing you possible completions (with pop-up help for each) and available code snippets. For example, typing cla will display the keyword class, the decorator classmethod and two built-in snippets with class templates. Select the desired completion with the arrow keys and Enter, or by double clicking.

Spyder's Editor pane, showing a code completion example

You can enable or disable on-the-fly code completion, as well as modify when it is triggered and what results are shown, under Preferences ‣ Completion and Linting ‣ General ‣ Completions. Spyder also allows you to define custom completion snippets to use, in addition to the ones offered by the LSP, under Preferences ‣ Completion and Linting ‣ Advanced.

-
-
-

Linting and code style

+
+
+

Linting and code style#

Spyder can optionally highlight syntax errors, style issues, and other potential problems with your code in the Editor, which can help you spot bugs quickly and make your code easier to read and understand.

Spyder's Editor pane, showing an example of a highlighted code error

The Editor’s basic linting, powered by Pyflakes, warns of syntax errors and likely bugs in your code. It is on by default, and can be disabled or customized under Preferences ‣ Completion and Linting ‣ Linting.

Spyder's preferences dialog, showing linting settings -

Code style analysis, powered by Pycodestyle, flags deviations from the style conventions in PEP 8. +

Code style analysis, powered by Pycodestyle, flags deviations from the style conventions in PEP 8. It is not active by default, but you can enable it and customize the Pycodestyle error codes shown with the options under Preferences ‣ Completion and Linting ‣ Code style and formatting ‣ Code Style.

Spyder's preferences dialog, showing code style and formatting settings -
-
-

Introspection features

+ +
+

Introspection features#

If there’s a function, class or variable for which you would like to check its definition, you need to Ctrl/Cmd-click its name in the Editor (or click its name and press Ctrl-G / Cmd-G to jump to the file and line where it is declared.

Spyder's Editor pane, showing the go to definition feature

You can hover over the name of an object for pop-up help, as described in the Help pane docs.

Spyder's Editor pane, showing an example of a hover hint

Finally, if you type the name of a function, method or class constructor and then an open parenthesis, a calltip will pop up which shows the function’s parameters as you type them, as well as a summary of its documentation. These features can be enabled and customized under Preferences ‣ Completion and Linting ‣ Introspection.

-
-
-
-

Keyboard shortcuts

+ + +
+

Keyboard shortcuts#

To view the Editor’s primary keyboard shortcuts, consult its section under Help ‣ Shortcuts Summary. The full list can be browsed, searched and customized (on double-click) in Preferences ‣ Keyboard shortcuts.

-
- -
+ + - + -
- - Debugger - Files - -
- - -
- -
- - - - -
- -
-
-
- + + + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/panes/fileexplorer.html b/5/panes/fileexplorer.html index af5c9c444..7a30ab488 100644 --- a/5/panes/fileexplorer.html +++ b/5/panes/fileexplorer.html @@ -1,581 +1,484 @@ - - + + + - + + Files — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+
+ +
+ + + + + +
+
- - - - - - - - +
- - - - - -
- -
-
-
-

Files

+ +
+ +
+

Files#

The Files pane is a filesystem and directory browser built right into Spyder. You can view and filter files according to their type and extension, open them with the Editor or an external tool, and perform many common operations.

Spyder Files pane, showing a tree view of files and metadata -
-

File operations

+
+

File operations#

To browse the files on your system, use the arrows at the top of the pane. You can expand/collapse the folders in the pane to display the files and subdirectories hierarchically. Double-clicking a folder will open it, showing the files inside and making it your working directory.

@@ -586,15 +489,15 @@

Files

You can copy and paste one or several files to and from the pane, and copy their absolute or relative paths to the clipboard as text. If copying the paths for multiple files, they will be automatically formatted so you can paste them directly into a Python list.

Spyder Files pane showing copying absolute path to Editor -

-
+
+

Version control support#

The Files pane allows you to perform basic operations with the Git distributed version control system, like committing your changes and browsing the repository a given file or folder is part of. This is particularly useful when you’re working in Spyder Projects.

Spyder Files pane showing committing change of file -
-
-

Options menu

+ +
+

Options menu#

The options menu in the top right of the Files pane offers several ways to customize how your files are displayed.

By default, the pane displays the contents of your working directory without filtering. However, it can filter the list to show only files matching the patterns set under Show filenames with these extensions…, if you toggle the Filter filenames button in the pane toolbar.

@@ -603,206 +506,143 @@

Options menuType, Size and Date Modified columns using the corresponding menu options.

Spyder Files pane showing columns checked and shown

The menu also gives you the option to open files and directories with a single instead of a double click, to suit your preferences.

-

-
-

File associations

+ +
+

File associations#

Files allows you to associate different external applications with specific file extensions they can open. Under the File associations tab of the Files preferences pane, you can add file types and set the external program used to open each of them by default.

Spyder Files pane showing files associations

Once you’ve set this up, files will automatically launch in the associated application when opened from Spyder’s Files pane. Additionally, when you right-click a file, you will find an Open with… option that will allow you to select from the applications associated with this extension.

Spyder Files pane showing opening file with associated program -
- -
+ + -
+ -
- - Editor - Find - -
- - -
- -
- - - - -
- -
-
-
-
+
+ + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/panes/findinfiles.html b/5/panes/findinfiles.html index 583a1c83f..32f4604cd 100644 --- a/5/panes/findinfiles.html +++ b/5/panes/findinfiles.html @@ -1,580 +1,483 @@ - - + + + - + + Find — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+
+ +
+ + + + + +
+
- - - - - - - - +
- - - - - - -
- -
-
-
-

Find

+ +
+ +
+

Find#

The Find pane allows you to search the content of text files in a user-defined location, with advanced features to filter your results.

Spyder Find in Files panel, with search results shown per-file -
-

Using the Find pane

+
+

Using the Find pane#

To search for text in the Find pane, enter it in the field in the top left and press the search button. This will allow you to view and navigate through all the occurrences of your search text in your working directory. You can expand or collapse the search results to view the matches in each file. @@ -584,9 +487,9 @@

Using the Find paneClear the list option from the dropdown menu in the Search in field.

Spyder Find pane showing choosing new directory and directory stored in the list -

-
+
+

Choosing search options#

You can select from a number of options to enable searches as broad or refined as you need.

To enable case sensitivity, which only returns matches with identical capitalization to your search text, toggle the Aa button on.

Spyder Find pane showing search with case sensitive activated @@ -596,180 +499,131 @@

Choosing search options

Finally, to change the number of matches displayed, select the Set maximum number of results option under the pane’s Options menu in the top right.

Spyder Find pane showing window with maximum results dialog open -

- -
+ + -
+ -
- - Files - Help - -
- - -
- -
- - - - -
- -
-
-
-
+
+ + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/panes/help.html b/5/panes/help.html index f32275402..2c85674a4 100644 --- a/5/panes/help.html +++ b/5/panes/help.html @@ -1,583 +1,487 @@ - - + + + - + + Help — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+
+ +
+ + + + + +
+
- - - - - - - - +
- - - - - -
- -
-
-
-

Help

+ +
+ +
+

Help#

You can use the Help pane to find, render and display rich documentation for any object with a docstring, including modules, classes, functions and methods. This allows you to access documentation easily directly from Spyder, without having to interrupt your workflow.

Spyder main window showing getting help for numpy arrays from editor

You can also access Spyder’s tutorial from here, which will guide you through some basic steps for using its key features.

-Spyder Help pane showing the link for the Spyder's tutorial -
-

Getting help

+Spyder Help pane showing the link for the Spyder's tutorial + +
+

Getting help#

Help can be retrieved both by static analysis of open files in the Editor, or by dynamically inspecting an object in an IPython Console. You can trigger help manually by pressing the configurable help shortcut (Ctrl-I by default).

Spyder Editor and Help panes, with the latter displaying documentation for an object selected in the former. @@ -586,215 +490,152 @@

Getting helpEditor and the Console under Preferences ‣ Help ‣ Automatic Connections, and turned on and off dynamically via the lock icon in the top right corner of the Help pane. If enabled, simply typing a left parenthesis (() after a function or method name will show its associated help.

Spyder console and help pane showing automatic help with parenthesis -

-
+
+

Understanding help modes#

You can use the options menu (Hamburger icon) in the top right of the Help pane to toggle the help display mode.

Rich Text mode renders the object’s docstrings with Sphinx, Plain Text mode displays the docstring without formatting while Show Source displays the docstring inline with the code for the selected object, or any Python portion of it (if the object is not pure Python). The latter can be useful when docstrings are not available or insufficient to document the object.

Spyder help pane showing different modes -
-
-

Getting help by hovering

+ +
+

Getting help by hovering#

You can also get summary help for objects by hovering over them in the Editor. Clicking the hover popup will open the full documentation in the Help pane.

Editor pane showing help of an object from hover -
-
-

Control automatic import

+ +
+

Control automatic import#

When you get help in the IPython Console for an object that has not been previously imported, it is automatically loaded in Spyder’s own internal interpreter so that documentation can be shown when available. This can be disabled in the Help pane’s top-right options menu so that only documentation from imported objects is displayed.

-
- -
+ + -
+ -
- - Find - History - -
- - - -
+
+
+ +
-
-
- Connect with us on: - - - GitHub - - - | - - Twitter - - - | - - Facebook - - - | - - YouTube - - - | - - Instagram - - - | - - Google Groups - -
-
-
- - -
- © 2009-2024 Spyder Doc Contributors | MIT License -
- -
- - Powered by Sphinx 3.5.4 - - - | - Page source - -
-
-
-
+ + + + + + + +
+ + +
\ No newline at end of file diff --git a/5/panes/historylog.html b/5/panes/historylog.html index f464915c8..a084a5e6a 100644 --- a/5/panes/historylog.html +++ b/5/panes/historylog.html @@ -1,778 +1,625 @@ - - + + + - + + History — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+
+ +
+ + + + + +
+
- - - - - - - - +
- - - - - - - - - -
- -
-
-
-

History

+ +
+ +
+

History#

With the History pane, you can view the recent code and commands you’ve entered into any IPython Console, along with their timestamp.

Spyder History Log, displaying a list of previously executed commands -
-

Using the History pane

+
+

Using the History pane#

Navigating the History pane is very straightforward. Each Spyder session is marked by a date and timestamp, making it easy to remember when you executed a certain command. Statements can be selected and copied from the context menu or with the normal system shortcuts. Just like in the Editor, selecting a word or phrase displays all other occurrences, and full syntax highlighting is also supported. The last ≈1000 lines entered are stored in the pane.

-
-
-

Options Menu

+
+
+

Options Menu#

The top-right options menu (Hamburger icon) allows you to toggle wrapping of long lines (Wrap lines), and whether the line number is displayed to the left of the text (Show line numbers).

Spyder History Log, displaying wrapping lines and showing line number -
-
-

Advanced usage

+ +
+

Advanced usage#

The list of commands shown in the History pane are stored in history.py in the .spyder-py3 directory in your user home folder (by default, C:/Users/username on Windows, /Users/username for macOS, and typically /home/username on GNU/Linux). You might need to show invisible files in order to see it on a non-Windows operating system.

Spyder History Log file

While there is currently no built-in way to clear history from the Spyder interface aside from resetting preferences, you can do so by closing Spyder, deleting this file and restarting Spyder again.

-
- -
+ + -
+ - - - -
- -
- - - - -
- -
-
-
-
+
+ + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/panes/index.html b/5/panes/index.html index a224b40a3..4390d373f 100644 --- a/5/panes/index.html +++ b/5/panes/index.html @@ -1,576 +1,476 @@ - - + + + - - Panes in Depth — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + Panes — Spyder 5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+
+ +
+ + + + + +
+
- - - - - - - - +
- - - - - - -
- -
-
-
-

Panes in Depth

+ +
- - -
-
+
+ + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/panes/ipythonconsole.html b/5/panes/ipythonconsole.html index f555d7ed9..f4c9aaab2 100644 --- a/5/panes/ipythonconsole.html +++ b/5/panes/ipythonconsole.html @@ -1,584 +1,487 @@ - - + + + - + + IPython Console — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+ +
+ +
+ + + + +
+
- - - - - - - - +
- - - - - - -
- -
-
-
-

IPython Console

+ +
+ +
+

IPython Console#

The IPython Console allows you to execute commands and interact with data inside IPython interpreters.

Spyder IPython Console with code, inline plots, and the In prompt

To launch a new IPython instance, go to New console (default settings) under the Consoles menu, or use the keyboard shortcut Ctrl-T (Cmd-T on macOS) when the console is focused.

Spyder showing opening a new Ipython Console

From the same menu, you can stop currently executing code with Interrupt kernel, clear a console’s namespace with Remove all variables, or relaunch a fresh one with Restart kernel. As each console is executed in a separate process, this won’t affect any others you’ve opened, and you will be able to easily test your code in a clean environment without disrupting your primary session.

-
-

Supported features

+
+

Supported features#

Any IPython Console, whether external or started by Spyder, supports:

-
-

Special consoles

+
+
+

Special consoles#

Spyder also supports several types of specialized consoles. A Sympy console enables creating and displaying symbolic math expressions right inside Spyder. A Cython console allows you to use the Cython language to speed up your code and call C functions directly from Python. Finally, a Pylab console loads common Numpy and Matplotlib functions by default; while this is deprecated and strongly discouraged for new code, it can still be used if necessary for legacy scripts that need it.

Spyder showing opening a new special Console -
-
-

Options menu

+ +
+

Options menu#

The options menu allows you to inspect your current environment variables (Show environment variables), and the contents of your system’s PATH (Show sys.path contents). In addition, you can have each console display how long it has been running with Show elapsed time.

Spyder IPython Console with options menu

You can also change the name of the current IPython console tab with the Rename tab option, or by simply double-clicking it.

Spyder IPython Console showing renaming console -
-
-

Using external kernels

+ +
+

Using external kernels#

You can connect to external local and remote kernels (including those managed by Jupyter Notebook or QtConsole) through the Connect to an existing kernel dialog under the Consoles menu. For this feature to work, a compatible version of the spyder-kernels package must be installed in the environment or machine in which the external kernel is running.

Connect to external kernel dialog of the Spyder IPython console -
-

Connect to a local kernel

+
+

Connect to a local kernel#

To connect to a local kernel that is already running (e.g. one started by Jupyter notebook),

  1. Run %connect_info in the notebook or console you want to connect to, and copy the name of its kernel connection file, shown after jupyter <app> --existing.

    @@ -626,9 +529,9 @@

    Connect to a local kernel

-
-
+
+

Connect to a remote kernel#

To connect to a kernel on a remote machine,

  1. Launch a Spyder kernel on the remote host if one is not already running, with python -m spyder_kernels.console.

    @@ -654,10 +557,10 @@

    Connect to a remote kernelConnecting to a remote kernel page in the IPython Cookbook.

    -

-
-
-

Reload changed modules

+ + +
+

Reload changed modules#

When working in an interactive session, Python only loads a module from its source file once, the first time it is imported.

Spyder’s User Module Reloader (UMR) automatically reloads modules right in your existing IPython consoles whenever they are modified and re-imported. With the UMR enabled, you can test changes to your code without restarting the kernel.

@@ -665,9 +568,9 @@

Connect to a remote kernelReloaded modules: message in the console listing the files it has refreshed when it is activated. If desired, you can turn it on or off, and prevent specific modules from being reloaded, under Preferences ‣ Python interpreter ‣ User Module Reloader (UMR).

Spyder preferences showing option to use module reloader -

- -
+ + -
+ - - - - - +
+ + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/panes/onlinehelp.html b/5/panes/onlinehelp.html index faa3be9bd..62acd22c7 100644 --- a/5/panes/onlinehelp.html +++ b/5/panes/onlinehelp.html @@ -1,580 +1,483 @@ - - + + + - + + Online Help — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+
+ +
+ + + + + +
+
- - - - - - - - +
- - - - - - -
- -
-
-
-

Online Help

+ +
+ +
+

Online Help#

The Online Help pane provides a built-in web browser to explore dynamically generated Python documentation on installed modules—including your own—rendered by a pydoc server running in the background.

Spyder Online Help pane on the index page, a list of builtin modules -
-

Using the Online Help

+
+

Using the Online Help#

The Online Help’s home shows an index where you can browse the documentation of standard library modules, third party packages installed in your Python environment, and your own local code. Click on the name of any module to open its documentation.

Spyder Online Help pane showing module browsing @@ -588,9 +491,9 @@

Using the Online Help

Links above the search field provide an index of topics with general help and a list of Python keywords linked to their corresponding docs.

Spyder Online Help pane on the topics page -

-
+
+

Toolbar items#

Just like in a web browser, the forward and back buttons move through the pages you have visited, and the home button (house icon) returns you to the module index.

Spyder Online Help pane showing navigation with arrows

Perform a realtime search within a page’s content with the Find button (magnifying glass icon top left) or Ctrl-F, navigate through matches with the Up and Down buttons, and make matching case sensitive with the Aa button.

@@ -601,179 +504,130 @@

Toolbar items

To cancel searching or page loading, click the stop button (red square), and to reload the page (such as when you change your own package’s documentation), press the refresh button (circular arrow).

Spyder Online Help pane showing refreshing pane when updating docs -

- -
+ + -
+ - - - -
- -
- - - - -
- -
-
-
-
+
+ + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/panes/outline.html b/5/panes/outline.html index 4509aa00f..c2d3386c0 100644 --- a/5/panes/outline.html +++ b/5/panes/outline.html @@ -1,582 +1,485 @@ - - + + + - + + Outline — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+
+ +
+ + + + + +
+
- - - - - - - - +
- - - - - - -
- -
-
-
-

Outline

+ +
+ +
+

Outline#

The Outline pane allows you to view and navigate the functions, classes, methods, cells and comments in open Python files. To show or hide the Outline pane, use View ‣ Panes ‣ Outline or Ctrl-Shift-O / Cmd-Shift-O. Click an entry in the outline to jump to its source file location, and use the Go to cursor position toolbar button to highlight the item corresponding to the current Editor position.

Outline pane -
-

Options menu

+
+

Options menu#

The options menu in the top-right of the pane allows customizing how the outline is displayed.

Outline options menu

These customization settings include:

@@ -592,9 +495,9 @@

Options menuSort files alphabetically: Sort the file list in alphabetical order. When disabled, all tabs will be sorted by the tab order of the currently selected Editor panel.

-

-
+
+

Icons#

The following icons are used for outline elements:

-
- -
+ + -
+ - - - -
- -
- - - - -
- -
-
-
-
+
+ + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/panes/plots.html b/5/panes/plots.html index d7ede72c9..27ea1e5ab 100644 --- a/5/panes/plots.html +++ b/5/panes/plots.html @@ -1,604 +1,507 @@ - - + + + - + + Plots — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+
+ +
+ + + + + +
+
- - - - - - - - +
- - - - - -
- -
-
-
-

Plots

+ +
+ +
+

Plots#

The Plots pane shows the static figures and images created during your session. It will show you plots from the IPython Console, produced by your code in the Editor or generated by the Variable Explorer allowing you to interact with them in several ways.

Spyder main window showing execution for the Plots pane

The figures shown in the Plots pane are those associated with the currently active Console tab; if you switch consoles, the list of plots displayed (or none at all, if a new console) will change accordingly.

Spyder's plots pane and console showing switching consoles -
-

Options menu

+
+

Options menu#

The options menu in the top right of the Plots pane offers several ways to customize how your plots are displayed.

-
-

Mute inline plotting

+
+

Mute inline plotting#

The Mute inline plotting option is enabled by default, preventing your plots from appearing in the Console. If you deactivate this option, figures will display in both the Plots pane and the Console.

Spyder's plots pane and console showing plots in the console -
-
-

Show plot outline

+
+
+

Show plot outline#

The Show plot outline option, off by default, shows a thin stroke surrounding the area of the figure area, which will also appear in the exported images.

Spyder's plots pane showing a plot's outline -
-
-

Fit plots to window

+
+
+

Fit plots to window#

The Fit plots to Window option, also enabled by default, sizes the figures to match the pane. Disabling it will display plots at their native size, and allow you use the zoom buttons at the top of the pane to scale them manually.

Spyder main window showing plots zoom -
-
-
-

Toolbar options

+ + +
+

Toolbar options#

The toolbar at the top of the Plots pane provides several useful features that allow you to interact with your figures. For example, you can cycle sequentially through the plot list with the forward and back arrows.

Spyder main window showing plot navigation using arrows. @@ -609,208 +512,136 @@

Toolbar options

Finally, you can use the “remove” and “remove all” buttons in the toolbar to clear plots from the list.

Spyder plots pane showing pasting plot in LibreOffice. -

- -
+ + -
+ - - - -
- -
- - - - -
- -
-
-
- +
+ + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/panes/profiler.html b/5/panes/profiler.html index 06403496c..67241de60 100644 --- a/5/panes/profiler.html +++ b/5/panes/profiler.html @@ -1,581 +1,484 @@ - - + + + - + + Profiler — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+
+ +
+ + + + + +
+
- - - - - - - - +
- - - - - - - - - -
- -
-
-
-

Profiler

+ +
+ +
+

Profiler#

The Profiler pane recursively determines the run time and number of calls for every function and method called in a file, breaking down each procedure into its smallest individual units. This allows you to easily identify the bottlenecks in your code, points you toward the exact statements most critical for optimization, and measures the performance delta after followup changes.

Spyder Profiler pane, displaying a list of functions and their execution time -
-

Running the Profiler

+
+

Running the Profiler#

You can browse for a file using the open button to the right of the Profiler’s path box (top left of the pane), which will run profiling over this file automatically.

Spyder Profiler pane, showing browsing a file and running profiler

You can manually enter the path in the pane’s path box and then run the analysis on the file by pressing Profile in the Profiler pane.

@@ -593,9 +496,9 @@

Running the ProfilerLoad data button. To remove the loaded data, click the Clear comparison button.

Spyder Profiler pane, showing running profiler from menu bar -

-
+
+

Interpreting the results#

Results are broken down by function/method/statement, with each sub-element listed hierarchically under the top-level item that called them. Total Time is that taken by the specified item and every function “underneath” (i.e. called by) it, while Local Time only counts the time spent in the particular callable object’s own scope. The Calls column displays the total number of times the specified object was called at that level inside its parent calling function (or within the __main__ scope, if a top-level object). @@ -604,9 +507,9 @@

Interpreting the resultsProfiler on a file calling a function sleep_wrapper() that in turn called the sleep() function, and the sleep_wrapper() function took a total of 3.87 ms to run, with 3.86 ms of that spent executing the sleep() function inside it. Therefore, if sleep() called nothing else itself, its Total Time and Local Time would both be identical, at 3.87 ms. Meanwhile, Total Time for sleep_wrapper() would be 3.86 ms, but Local Time only 0.01 ms as the rest was spent inside the sleep() function it called.

-

-
-

Profiler plugins

+ +
+

Profiler plugins#

There are two additional plugins that you can install to enable other types of profiling in Spyder. First, Spyder Line Profiler allows you to benchmark each line of your code individually. To learn more, visit the spyder-line-profiler git repository.

@@ -614,188 +517,132 @@

Profiler pluginsspyder-memory-profiler git repository.

Spyder Profiler pane, displaying a list of functions and their execution time -

- -
+ + -
+ -
- - Plots - Projects - -
- - - -
+
+ + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/panes/projects.html b/5/panes/projects.html index b8d4f4156..a8c9cb55a 100644 --- a/5/panes/projects.html +++ b/5/panes/projects.html @@ -1,783 +1,630 @@ - - + + + - + + Projects — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+
+ +
+ + + + + +
+
- - - - - - - - +
- - - - - - - - - -
- -
-
-
-

Projects

+ +
+ +
+

Projects#

Spyder allows you to associate a given directory with a Project, which automatically saves and restores the files you have open in the Editor from the last time you opened that project. With the Project pane, you can browse all your project’s files, regardless of your current working directory or Files location.

Spyder showing Project Explorer and projects menu

In addition, your project’s root folder is used to set your working directory, and automatically added to the PYTHONPATH, so you can easily import and work with any modules and packages you create inside of it.

-
+

Note

Projects are completely optional and not imposed on users. All of Spyder’ functionality (code completion, session saving, File Explorer, working directory, etc) is available without creating a Project.

-
-

Creating a Project

+
+

Creating a Project#

To create a Project, click the New Project entry in the Projects menu, choose whether you’d like to associate a Project with an existing directory or make a new one, and enter the Project’s name and path.

Spyder showing opening a new project -
-
-

Using the Projects Pane

+
+
+

Using the Projects Pane#

Once a Project is opened, the Project pane is shown, presenting a tree view of the current Project’s files and directories. It allows you to perform all the same operations as Spyder’s Files pane.

Spyder Project Explorer, displaying a directory tree of project files -
-
-

Working with version control

+ +
+

Working with version control#

The Project pane has basic integration with the Git distributed version control system, just like in the Files pane. You can commit or browse a file, directory or the entire repository via the commands in the context menu.

To use this functionality, the Project must be located in a git repository and the git and gitk commands must be on the system path.

-
- -
+ + -
+ - - - - -
+
+ + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/panes/pylint.html b/5/panes/pylint.html index 7fdc86a6f..10c4ef9c1 100644 --- a/5/panes/pylint.html +++ b/5/panes/pylint.html @@ -1,582 +1,485 @@ - - + + + - + + Code Analysis — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+
+ +
+ + + + + +
+
- - - - - - - - +
- - - - - - - - - -
- -
-
-
-

Code Analysis

+ +
+ +
+

Code Analysis#

The Code Analysis pane detects style issues, bad practices, potential bugs, and other quality problems in your code, all without having to actually execute it. Based on these results, it also gives your code an overall quality score. Spyder’s code analyzer is powered by the best-in-class Pylint back-end, which can intelligently detect an enormous and customizable range of potential errors, bad practices, quality issues, style violations, and more.

Spyder Pylint pane, showing numerous issues discovered in a file -
-

Using the code analyzer

+
+

Using the code analyzer#

You can select the desired file to analyze directly in the Editor by clicking anywhere within it. To run the analysis, press the configurable shortcut (F8 by default), select Source ‣ Run code analysis from the menu bar or click the Analyze button in the Code Analysis pane. If the Code Analysis pane is not visible, you can open it under View ‣ Panes ‣ Code Analysis. @@ -591,16 +494,16 @@

Using the code analyzer

Finally, you can click the dropdown or press the dropdown arrow in the filename field to view results of previous analyses.

Spyder Pylint pane, showing history -

-
+
+

Options menu#

The number of recent runs Spyder should remember can be customized in the History dialog, available from the Code Analysis options menu.

Spyder Pylint pane, customizing history dialog

You can also expand or collapse one or all the sections in the pane by using the corresponding options in the options menu.

Spyder Pylint pane, expanding and collapsing sections -
-
-

Advanced options

+ +
+

Advanced options#

You can turn certain messages off at the line, block or file/module level by adding a # pylint: disable=MESSAGE-NAMES comment at the respective scope, where MESSAGE_NAMES should be replaced with a comma-separated list (or single value) of Pylint message names. For example, a directive might look like # pylint: disable=invalid-name, or # pylint: disable=fixme, line-too-long.

Spyder Pylint pane, showing disabling a message locally @@ -608,188 +511,132 @@

Advanced optionspylint --generate-rcfile > .pylintrc in your user directory, from Anaconda Prompt (on Windows) or your terminal (macOS/Linux). For more details on configuring Pylint, see the Pylint documentation.

Spyder Pylint pane, disabling a message globally in the .pylintrc -

- -
+ + -
+ - - - -
- - -
-
+
+ + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/panes/variableexplorer.html b/5/panes/variableexplorer.html index 75fc14c7c..6bd4de6d4 100644 --- a/5/panes/variableexplorer.html +++ b/5/panes/variableexplorer.html @@ -1,576 +1,479 @@ - - + + + - + + Variable Explorer — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+ +
+ +
+ + + + +
+
- - - - - - - - +
- - - - - - -
- -
-
-
-

Variable Explorer

+ +
+ +
+

Variable Explorer#

The Variable Explorer allows you to interactively browse and manage the objects generated running your code.

Spyder Variable Explorer execution with a variable of type list

It shows the namespace contents (including all global objects, variables, class instances and more) of the currently selected IPython Console session, and allows you to add, remove, and edit their values through a variety of GUI-based editors.

@@ -578,29 +481,32 @@

Variable Explorer -
-

Object viewers

+
+

Object viewers#

Spyder’s Variable Explorer offers built in support for editing lists, strings, dictionaries, NumPy arrays, Pandas DataFrames, Series and more; as well as being able to plot and visualize them with one click.

-
-

Strings

+
+

Strings#

When a string variable is longer than forty characters, you can double click it to see its value in a text editor to more easily modify it.

-Variable Explorer text editor, displaying a long string in a window -
-
-

Dictionaries

+Variable Explorer text editor, displaying a long string in a window + +
+
+

Dictionaries#

Double-clicking on dictionaries will show a viewer displaying each of its keys with its associated value. You can double click any of the values to modify them, which will open a new viewer if the value is itself an object.

-Dictionary editor displaying keys and their types, sizes, and values -
-
-

Lists

+Dictionary editor displaying keys and their types, sizes, and values + +

+
+

Lists#

For lists, the main Variable Explorer displays a preview of the first ten values. To see them all, double click the list to open a viewer that will display the index, type, size and value of each element of the list. Just like dictionaries, you can double-click values to edit them.

-List editor displaying a list, showing one being edited -
-
-

Numpy arrays

+List editor displaying a list, showing one being edited + + +
+

Numpy arrays#

Like lists, for Numpy arrays the Variable Explorer shows a preview of their values. Double-clicking them will open a viewer displaying the array values in a “heat map”, with each value in a grid cell colored based on its numeric quantity. You can deactivate the background color by unchecking the appropriate option in the viewer, which will happen automatically if the array is too large to improve performance.

@@ -610,28 +516,29 @@

Numpy arraysResize button will set it automatically.

Array editor with a 2D int array, showing resizing of columns -

-
-

DataFrames

+ +
+

DataFrames#

DataFrames, like Numpy arrays, display in a viewer where you can show or hide “heatmap” colors, change the format and resize the rows and columns either manually or automatically.

Dataframe editor showing data frame "heatmap"

Additionally, starting in Spyder 4, the Variable Explorer has MultiIndex support in its DataFrame inspector, including for multi-level and multi-dimensional indices.

Dataframe editor showing multi-index support -
-
-
-

Options menu

+ + +
+

Options menu#

The options menu in the top right of the Variable Explorer pane allows you filter the objects shown by a number of different criteria.

Spyder Variable Explorer, with options menu

It also allows you to display the min and max of Numpy arrays instead of a preview of their values.

-Variable Explorer showing max and min values of numpy array -
-
-

Toolbar buttons

+Variable Explorer showing max and min values of numpy array + + +
+

Toolbar buttons#

The Variable Explorer’s toolbar includes several useful features that affect the entire namespace. For example, you can save the current session’s data as a .spydata file, which can be loaded later to recover all the variables stored.

Variable Explorer showing how to save and import data -
+

Warning

You should not load any .spydata file from any source you don’t fully trust (ideally, only those files you’ve saved yourself). Like with any Python pickle, it is inherently not secure against malicious code, as it can load any Python object and can execute arbitrary code on your machine. @@ -640,9 +547,9 @@

Toolbar buttons

Finally, there is a button to refresh the Variable Explorer’s contents, which will update it to show the current state of the code running in the IPython console.

-

-
+
+

Advanced functionality#

The context menu, available by right-clicking any variable, provides numerous additional options to interact with objects of various types. These include renaming, removing or editing existing variables, as well as the duplicate option to create a new copy of one of them under a new name you enter in the resulting dialog box.

Variable Explorer showing duplicating a variable @@ -655,245 +562,146 @@

Advanced functionalityFor lists and Numpy arrays, more advanced options are available, including generating plots and histograms of their values appropriate to their type and dimensions.

Plot window showing a plot, generated via the previous options

You can even save an array to a .npy file by simply clicking the appropriate option, which can later be loaded by Spyder or in your code via numpy.load().

-
Context menu for an int array, with the Show image option selected +Context menu for an int array, with the Show image option selected +

For two-dimensional arrays, you can also display them as images, treating their values as RGB colors. For this, Spyder uses Matplotlib’s colormaps, which can be easily changed to match your preferences.

Interactive image based on the array's data

Finally, we added a context-menu action to open any object using the new Object Explorer even if they already have a builtin viewer (DataFrames, arrays, etc), allowing for deeper inspection of the inner workings of these datatypes.

Object explorer showing dataframe -

- -
+ + -
+ - - - -
- -
- - - - -
- -
-
-
- - - - - - - Open chat - +
+
+ +
-
-
- Connect with us on: - - - GitHub - - - | - - Twitter - - - | - - Facebook - - - | - - YouTube - - - | - - Instagram - - - | - - Google Groups - -
-
-
- - -
- © 2009-2024 Spyder Doc Contributors | MIT License -
- -
- - Powered by Sphinx 3.5.4 - - - | - Page source - -
-
-
-
+ + + + + + + + +
+ + +
\ No newline at end of file diff --git a/5/plugins/index.html b/5/plugins/index.html index 928d76d22..2b2341b0f 100644 --- a/5/plugins/index.html +++ b/5/plugins/index.html @@ -1,576 +1,465 @@ - - + + + - - Spyder Plugins — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + Plugins — Spyder 5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+
+ +
+ + + + + +
+
- - - - - - - - +
- - - - - - -
- -
-
-
-

Spyder Plugins

+ +
- - -
-
+
+ + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/plugins/lineprofiler.html b/5/plugins/lineprofiler.html index f0febf7e3..58a5c9e01 100644 --- a/5/plugins/lineprofiler.html +++ b/5/plugins/lineprofiler.html @@ -1,594 +1,486 @@ - - + + + - + + Spyder Line Profiler — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+ +
+ +
+ + + + +
+
- - - - - - - - +
- - - - - -
- -
-
-
-

Spyder Line Profiler

+ +
+ +
+

Spyder Line Profiler#

Spyder-Line-Profiler is a plugin to run the Python line profiler. This package profiles the time that individual lines of code take to execute.

Spyder with the Line Profiler pane open -
-

Installing the Line Profiler

+
+

Installing the Line Profiler#

If you installed Spyder using conda, the best way to obtain Spyder-Line-Profiler is to run the following command in your terminal (or Anaconda prompt on Windows):

conda install spyder-line-profiler -c conda-forge
 
-
+

Important

At the moment it is not possible to use this plugin with the Spyder Standalone installers for Windows and macOS. We’re working to add support for them in the future.

Restart Spyder in order to be able to use the plugin.

-
-
-

Using the Line Profiler

+
+
+

Using the Line Profiler#

When the Line Profiler is installed, it will be available under the menu item View ‣ Panes ‣ Line Profiler.

Spyder showing View Panes Line Profiler

You will see it then as a tab next to the Files tab. @@ -610,165 +502,123 @@

Using the Line Profiler

Line contents: the source code in the line.

Lines with a stronger color take more time to run.

-

-
+ + -
+ - -
- - -
+
+ + +
+
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/plugins/notebook.html b/5/plugins/notebook.html index 51a1aa34d..9def32074 100644 --- a/5/plugins/notebook.html +++ b/5/plugins/notebook.html @@ -1,593 +1,485 @@ - - + + + - + + Spyder Notebook — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+
+ +
+ + + + + +
+
- - - - - - - - +
- - - - - -
- -
-
-
-

Spyder Notebook

+ +
+ +
+

Spyder Notebook#

Spyder-notebook is a plugin that allows you to open, edit and interact with Jupyter Notebooks right inside Spyder.

Spyder Notebook in Spyder

Using notebooks inside Spyder allows you to take advantage of their web interface alongside Spyder’s powerful features such as the Variable explorer, console and debugger.

-
-

Installing the Notebook

+
+

Installing the Notebook#

If you installed Spyder using conda, the best way to install Spyder-notebook is to run the following command in your terminal or Anaconda prompt on Windows:

conda install spyder-notebook -c conda-forge
 
-
+

Important

At the moment it is not possible to use this plugin with the Spyder Standalone installers for Windows and macOS. We’re working to make that possible in the future.

Restart Spyder in order to be able to use the plugin.

-
-
-

Using the Notebook

+
+
+

Using the Notebook#

When the Notebook is installed, it will be available under the menu item View ‣ Panes ‣ Notebook.

Spyder showing view panes Notebook

You will see it then as a tab in the bottom of the editor area. When switching to it, a welcome screen will be displayed, from where you can create a new notebook by right-clicking it and selecting New notebook.

@@ -599,197 +491,141 @@

Using the NotebookOpen, which will allow you to look for ipynb files in your computer. Click any notebook that you want to open inside Spyder and you will be able to see it as a new tab in the Notebook pane.

Gif showing opening a Jupyter notebook inside Spyder

The Open recent option displays a list of the recent notebooks you opened in Spyder, from which you can select them and open them again in Spyder.

-

-
+
+

Connecting an IPython Console#

You can connect an IPython Console to your notebook, which will allow you to view your variables in the Variable Explorer. To do so, go to the options menu and click the Open console option. This will open a new console with the same name of your notebook and display the variables of the cells that you have executed previously in your Notebook. If you don’t see them, press Enter in the console.

Gif showing connecting console and displaying variables

You can view, modify and create new ones in the console too.

Since the Variable Explorer is associated to each console, closing the notebook’s console will immediately hide the variables from the Variable Explorer.

-
-
-

Additional Options

+ +
+

Additional Options#

The context menu, available by right-clicking the pane area outside the notebook, allows you to zoom your notebook in or out.

Gif zooming in and out the notebook.

You can also select the code from your Notebook and copy it on your clipboard to paste this code anywhere you want.

Gif copying and pasting

Finally, you can see all the server information of your notebook by clicking the Server info option in the context menu.

Server info for notebook in Spyder -
-
+ + -
+ - - - - -
+
+ + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/plugins/terminal.html b/5/plugins/terminal.html index 9cae4caaf..ba3e0c767 100644 --- a/5/plugins/terminal.html +++ b/5/plugins/terminal.html @@ -1,594 +1,486 @@ - - + + + - + + Spyder Terminal — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+ +
+ +
+ + + + +
+
- - - - - - - - +
- - - - - -
- -
-
-
-

Spyder Terminal

+ +
+ +
+

Spyder Terminal#

Spyder-terminal is a plugin that allows you to have integrated system terminals inside Spyder.

Spyder Terminal in Spyder

Spyder-terminal allows you to use any system shell installed in your system (e.g. Bash, Zsh or Powershell) rather than just the IPython console. You can use it to issue commands, interact with version control or to run programs.

-
-

Installing the Terminal

+
+

Installing the Terminal#

If you installed Spyder using conda, the best way to install Spyder-terminal is to run the following command in your Terminal or Anaconda prompt on Windows:

conda install spyder-terminal -c conda-forge
 
-
+

Important

At the moment it is not possible to use this plugin with the Spyder Standalone installers for Windows and macOS. We’re working to make that possible in the future.

Restart Spyder in order to be able to use the plugin.

-
-
-

Using the Terminal

+
+
+

Using the Terminal#

When the Terminal is installed, it will be available under the menu item View ‣ Panes ‣ Terminal.

Spyder showing view panes Terminal

You will see it then as a tab at the bottom of the console area. When switching to it, a new terminal tab will be created. You can also create more terminals by clicking in the + button at the upper right corner of the terminal area.

@@ -597,179 +489,130 @@

Using the Terminal

If you right click the terminal area, it’s possible to issue commands such as Clear Terminal, Zoom In/Out and Copy/Paste Text.

Spyder showing the terminal context menu -

-
+
+

Terminal Preferences#

It’s also possible to customize the Terminal by going to python ‣ Preferences… and then clicking on the Terminal tab on the menu to the left. You can select the shell interpreter, set the buffer limit and the type of cursor.

Preferences of the Terminal plugin -
-
+ + -
+ - - - - -
+
+ + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/quickstart.html b/5/quickstart.html index 268ac940a..5b49eacd3 100644 --- a/5/quickstart.html +++ b/5/quickstart.html @@ -1,590 +1,474 @@ - - + + + - - Quickstart — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + Tour — Spyder 5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+ +
+ +
+ + + + +
+
- - - - - - - - +
- - - - - -
- -
-
-
-

Quickstart

+ +
+ +
+

Tour#

Welcome to our Quickstart! Here you will find an interactive tour that will guide you through Spyder’s interface. You’ll get familiar with the most important parts of the IDE, especially those we’ll be mentioning throughout our docs. Finally, you’ll get to walk through some of Spyder’s key panes and functionality.

- - - - - - - - - + + + + + + + + + @@ -603,140 +487,109 @@

Quickstart

-
+ -
+ - -
- - -
-
+
+ + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/search.html b/5/search.html index 36beb29be..0c31f1fb0 100644 --- a/5/search.html +++ b/5/search.html @@ -1,718 +1,518 @@ - - + + + - - Search — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - - - - + Search - Spyder 5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + - - + + + + +
+ + - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
- - - +
+ +
+ + + + +
+
- - - - - - - - - - +
- - - - -
+
+ +
- +
- -
- -
-
- -

Search

-
- -

- Please activate JavaScript to enable the search - functionality. -

-

- Searching for multiple words only shows matches that contain - all words. -

-
- - - -
- -
-
- -
- -
- - -
- -
+ + + -
- +
+
\ No newline at end of file diff --git a/5/searchindex.js b/5/searchindex.js index e52bd5a20..2eb1e637b 100644 --- a/5/searchindex.js +++ b/5/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["faq","index","installation","panes/debugging","panes/editor","panes/fileexplorer","panes/findinfiles","panes/help","panes/historylog","panes/index","panes/ipythonconsole","panes/onlinehelp","panes/outline","panes/plots","panes/profiler","panes/projects","panes/pylint","panes/variableexplorer","plugins/index","plugins/lineprofiler","plugins/notebook","plugins/terminal","quickstart","troubleshooting/basic-first-aid","troubleshooting/call-for-help","troubleshooting/common-illnesses","troubleshooting/emergency-cpr","troubleshooting/first-steps","troubleshooting/index","troubleshooting/submit-a-report","videos/first-steps-with-spyder","videos/index","videos/working-with-spyder","workshops/financial","workshops/index","workshops/plugin-development","workshops/qt_fundamentals","workshops/scientific-computing"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["faq.rst","index.rst","installation.rst","panes/debugging.rst","panes/editor.rst","panes/fileexplorer.rst","panes/findinfiles.rst","panes/help.rst","panes/historylog.rst","panes/index.rst","panes/ipythonconsole.rst","panes/onlinehelp.rst","panes/outline.rst","panes/plots.rst","panes/profiler.rst","panes/projects.rst","panes/pylint.rst","panes/variableexplorer.rst","plugins/index.rst","plugins/lineprofiler.rst","plugins/notebook.rst","plugins/terminal.rst","quickstart.rst","troubleshooting/basic-first-aid.rst","troubleshooting/call-for-help.rst","troubleshooting/common-illnesses.rst","troubleshooting/emergency-cpr.rst","troubleshooting/first-steps.rst","troubleshooting/index.rst","troubleshooting/submit-a-report.rst","videos/first-steps-with-spyder.rst","videos/index.rst","videos/working-with-spyder.rst","workshops/financial.rst","workshops/index.rst","workshops/plugin-development.rst","workshops/qt_fundamentals.rst","workshops/scientific-computing.rst"],objects:{},objnames:{},objtypes:{},terms:{"000":33,"000000":33,"006954":33,"008778":33,"009126":33,"018784":33,"020698":33,"023033":33,"023134":33,"029931":33,"02d":35,"042060":33,"044063":33,"053174":33,"0583":33,"058395":33,"061057":33,"062207":33,"063068":33,"0809":33,"081239":33,"082308":33,"100":[0,35,37],"1000":[8,33,35],"11142":37,"1234":10,"127":0,"129":37,"144":32,"1454":33,"145416":33,"155103":33,"1637":33,"171":33,"1949":33,"1997":33,"199700":33,"200":0,"2012":[33,37],"2013":33,"2014":33,"2015":33,"2016":[33,37],"2017":33,"2018":33,"2019":33,"2020":[0,33],"2021":33,"2061518063427656":33,"2062":33,"2370":33,"23704031354688784":33,"252":33,"265":33,"26775":37,"2859":33,"2859066023606343":33,"300":33,"324053":33,"3290":37,"338":32,"3600":33,"371":37,"408009":33,"4181":33,"479":37,"482":32,"4940":33,"5372":37,"5813":37,"6203":33,"6241":37,"626":37,"6275":37,"6972":33,"7307":37,"7587":33,"8176":33,"89547":37,"abstract":[35,37],"bjerrek\u00e6r":37,"boolean":[17,35,37],"break":[0,14,33,35],"case":[2,4,6,11,23,25,26,29,30,32,33,35,36,37],"class":[7,12,16,17,25,32,33,35,36,37],"default":[0,2,3,4,5,7,8,10,13,14,16,23,25,30,32,33],"export":[0,13,37],"final":[0,2,3,4,6,10,13,14,16,17,20,22,25,27,30,32,34],"float":[33,35,37],"function":[0,1,2,3,5,7,9,10,12,14,15,19,22,25,30,32,35,36,37],"import":[0,2,3,9,10,15,22,25,26,32,33,35,37],"int":[30,35,37],"long":[0,8,10,16,25,33,35,36,37],"new":[0,1,2,3,4,10,13,15,17,20,21,23,24,25,27,30,32,33,35,37],"null":37,"public":[24,35,37],"return":[4,6,11,26,30,35,37],"short":[30,33,35],"static":[7,13,33,37],"super":35,"switch":[2,3,4,13,20,21,30,32],"true":[33,35,37],"try":[0,23,25,26,27,29,30,32,33,35,37],"while":[0,2,3,4,7,8,10,14,23,25,30,32,33,37],And:[2,33,35,37],Are:37,But:[33,37],For:[0,1,2,3,4,10,13,14,16,17,19,20,23,25,26,30,32,33,35,37],GPS:[35,36],IDE:[2,4,22,23,24,35,37],IDEs:[4,25],Its:[33,35],Not:[33,35],That:[35,36],The:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,24,26,29,30,32,33,34,36],Then:[0,2,10,23,26,33,35,36,37],There:[3,14,17,25,27,29,32,35,36,37],These:[1,2,4,12,17,23,30,33,35,36,37],Use:[0,3,4,26,32,33,37],Used:32,Using:[9,18],With:[0,2,3,8,10,15,30,32,35],Yes:[0,2],__file__:35,__init__:[16,35,36],__main__:14,_interv:35,_opt_w:33,_ret:33,aapl:33,abil:[29,35],abl:[2,10,17,19,20,21,23,24,25,27,32,33,35,37],about:[1,2,10,23,24,29,30,32,33,35,36,37],abov:[0,2,4,11,19,23,26,29,30,33,35,37],absolut:[0,5,12,32],access:[3,4,5,6,7,30,33,35,36],accident:30,accompani:33,accomplish:32,accord:[5,35],accordingli:13,account:[29,35,37],accumul:33,accur:33,achiev:[33,35,37],across:[17,32],action:[4,17,33],activ:[0,2,3,4,5,10,13,23,24,25,32,33,35],actual:[16,23,27,29,30,33,35],actual_weight:33,adapt:35,add:[0,2,3,4,5,17,19,25,26,32,33,34,36,37],add_application_toolbar:35,add_item_to_menu:35,add_item_to_toolbar:35,add_status_widget:35,added:[2,15,17,19,35],adding:[2,3,4,12,16,17,32,35],addit:[0,1,4,10,14,15,17,18,32,33,35,36,37],addition:[3,5,13,17,30,32],addon:35,address:[10,25,36],addstretch:35,addwidget:35,adequ:33,adjust:[3,16,17,35],administr:10,advanc:[0,1,4,6,9,28,32,37],advantag:[20,32,33,35,37],advertis:35,advis:[2,35],affect:[4,10,17,30,35,37],after:[2,4,7,10,14,19,23,25,26,30,32,33,35,37],afterward:[23,33],again:[8,20,23,27,32,35,37],against:17,age:37,ages:37,aid:[0,25,26,27,28,35],aim:[24,33],alert:37,algorithm:[33,37],align:37,all:[0,2,3,4,6,8,10,12,13,14,15,16,17,19,20,23,26,30,32,33,35,37],allow:[0,2,3,4,5,6,7,8,10,12,13,14,15,16,17,20,21,30,32,33,35,36,37],almost:[23,33],alon:27,along:[2,3,8,23,24,29,30],alongsid:20,alpha:37,alphabet:[4,12],alreadi:[0,2,10,17,24,25,26,27,33,35,37],also:[2,4,5,7,8,10,11,13,14,16,17,20,21,26,27,29,30,32,33,35,36,37],alt:[4,35],altern:[36,37],although:[0,33,35,37],alwai:[2,3,30,32,33,37],amazon:33,among:[33,35,36,37],amount:[2,33,37],amzn:33,anaconda:[0,16,19,20,21,23,25,26,27,29,30,32,33,35,37],analys:[16,32],analysi:[1,2,7,9,14,25,32,34,35],analyst:[1,33,37],analyz:[9,32,33,37],ani:[0,1,2,3,4,7,8,10,11,14,15,17,19,20,21,23,25,26,29,30,32,33,35,37],annex:35,annual:33,anoth:[0,6,13,23,32,33,35,37],anova:34,answer:[0,24,37],antiviru:26,anymor:32,anyon:[0,1,33,35],anyth:29,anywai:[0,2,29],anywher:[16,20,30,32,35],apach:35,api:[33,35],app:[10,26,36],appdata:23,appear:[0,2,4,13,14,17,25,27,30,32,33,35,37],append:37,appl:33,appli:[0,30,33,35,37],applic:[0,1,2,4,5,24,26,29,30,32,33,35,36,37],applicationtoolbar:35,appreci:[33,37],approach:[0,23,25,33],appropri:[0,2,17,32,35,37],approxim:33,apt:2,arbitrari:17,arch:2,area:[4,13,20,21,35],aren:[0,23,24,27],argument:[4,32,33,35,37],aris:35,around:[1,4,23,25,32,33,37],arrai:[2,30,32,33,37],arrang:36,arriv:35,arrow:[3,4,5,11,13,14,16,32],artifact:35,artifici:33,ascend:33,asid:[0,8,24,35],ask:[1,2,24,37],aspect:37,assembl:33,asset:33,assign:[30,32,33,35],assist:[2,23,24],associ:[7,9,13,15,17,20,32,35],assum:33,assumpt:37,asterisk:37,astra:33,astro:37,atom:25,attent:35,attribut:[5,12,33,35,37],auto:29,autocomplet:[3,4,27],autoformat:4,automat:[0,2,3,5,6,9,10,12,14,15,17,29,30,32,33,36,37],autopep8:4,avail:[0,2,3,4,7,15,16,17,19,20,21,23,30,32,33,35,36,37],averag:[19,33,37],avoid:[0,2,3,23,33,36,37],awar:35,axi:[33,37],axvlin:37,azn:33,back:[3,11,13,16,26,29,33,35],backend:[3,10,13,23],background:[4,11,17],backtick:29,backward:33,bad:[16,32,33,37],balanc:33,bar:[0,4,14,16,25,30,32,33,35,36,37],bare:[23,33],barplot:37,base:[0,1,10,16,17,32,33,35,36,37],base_curr:33,baselin:0,basetimerstatu:35,bash:21,basi:36,basic:[0,1,2,4,5,7,15,24,25,26,27,28,31,33,34,35],bat:[2,26],batch:26,bdist_wheel:35,beauti:[1,37],becaus:[30,32,33,35,37],becom:[1,36],been:[0,7,10,19,29,33,37],befor:[0,2,3,23,24,27,29,30,32,33,35,36,37],begin:[29,32,33,35],beginn:24,behav:[24,37],behavior:[4,29,33,35,36],being:[0,4,10,17,19,25,33,35],bell:37,below:[0,2,4,29,33,35],benchmark:14,benefit:0,best:[0,16,19,20,21,23,29,33,35,37],bet:33,better:[0,23,24,27,33,35,37],between:[4,14,30,32,33,35,37],beyond:[0,25,30,31,35,37],bia:37,big:[0,32],biggest:33,bin:[2,37],binder:[0,2,33,37],bit:33,bitcoin:33,bjerreka:37,black:4,block:[4,16,23,29,32,35,36,37],blue:33,bluetooth:[35,36],boilerpl:35,book:[33,37],border:37,bot:35,both:[2,7,13,14,16,25,29,30,32,33,37],bottleneck:[14,32],bottom:[0,20,21,25,30,33,37],bought:33,bound:33,boundari:37,box:[0,2,4,6,10,14,16,17,30,32,36,37],bracket:32,breakpoint:[4,9],brew:2,brief:24,briefli:30,bring:29,broad:[6,33],broadli:37,broken:[2,14],brought:33,brows:[4,5,10,11,14,15,16,17,30,32,33,37],browser:[0,2,5,11,32,35],bsd:35,btc:33,btc_hist:33,buffer:21,buffett:33,bug:[0,1,2,4,16,23,24,26,27,32,37],build:[33,34,36],built:[2,3,4,5,8,10,11,17,25,32,33,35,36,37],builtin:[3,17],bump:35,bundl:[0,2],busi:33,button:[0,4,5,6,9,11,12,13,14,16,19,20,21,29,30,32,33,35,36,37],c0326:32,ca_item:37,ca_test:37,calc:32,calcul:[20,33,35,37],call:[2,3,10,14,23,27,28,32,33,35,37],callabl:[14,36],calltip:[0,4,10,25],can:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,21,23,24,25,26,27,29,30,32,33,34,36],cancel:[11,14,16,35],cannot:[35,37],capabl:[1,2,10,33,37],capit:[6,35],captur:35,care:[2,23,33],carefulli:26,carlo:24,carpentri:35,cask:2,cat:37,categor:37,categori:[27,37],catplot:37,caus:[23,24,25],cautiou:33,cell:[0,12,17,20,36,37],center:37,central:24,certain:[6,8,16,32,37],certainli:23,chanc:[2,23,27,29,37],chang:[0,1,2,3,4,5,6,9,11,13,14,17,30,32,33,36,37],channel:[0,1,2,35],channel_prior:2,charact:17,charg:35,chart:[33,35,36,37],chat:[2,24],chatroom:2,check:[0,1,2,3,4,10,16,23,24,25,26,27,29,30,32,33,37],check_compat:35,checkbox:33,checkmark:35,children:35,choic:[4,35,37],choos:[9,15,17,30,33,35,36,37],chosen:37,chunk:[33,37],circl:35,circular:11,cirillo:35,cla:4,classic:33,classifi:35,classmethod:4,clean:[0,10,23,27,35,37],cleaner:32,clear:[0,3,4,6,8,10,13,14,21,27],clearli:33,click:[0,2,3,4,5,6,7,10,11,12,13,14,15,16,17,20,21,25,26,27,29,30,32,33,35,37],clipboard:[5,13,20,32,33,37],clone:35,close:[4,8,20,23,29,30,33,35,37],close_data_1:33,close_data_2:33,cloud:[33,37],cmap:33,cmd:[3,4,10,12,30,33],code:[0,2,3,7,8,9,10,11,12,13,14,15,17,19,20,23,24,25,27,29,30,31,35,36],codebas:35,codecel:4,cognitive_scor:37,coin:33,coin_search:33,cokkiecutt:35,col:37,colab:[33,37],collaps:[5,6,14,16,32],collect:37,color:[4,17,19,33,35,36,37],color_palett:37,colorbar:33,colormap:17,column:[5,14,17,19,30,32,33,36,37],com:35,combin:[1,37],come:[0,2,4,23,33,35,37],comma:16,command:[0,2,3,4,8,10,15,19,20,21,23,25,26,29,30,32,35],comment:[12,16,32],commerci:0,commit:[5,15],common:[0,2,4,5,10,27,28,32,36],commonli:[3,33,36],commun:[0,2,24,36,37],compani:[0,33],companionship:37,compar:[14,32,33,37],comparison:[14,32],compat:[0,2,10,37],compens:33,compil:35,complet:[0,1,3,9,10,15,28,29,30,33,35,36,37],complex:[3,30,33,35,37],compon:[9,33,34,35,37],compos:[33,37],composit:33,comprehens:[1,2,33,37],comput:[0,2,5,20,30,32,33,34,35,36],concept:[33,35],concern:37,conclus:37,concret:37,conda:[0,19,20,21,23,24,25,29,30,35],condit:3,conf:35,conf_default:35,conf_sect:35,conf_vers:35,conf_widget_class:35,config:[2,23,35],configur:[0,2,3,7,10,14,16,30,32,34],confirm:[0,33,37],conflict:[2,33,37],confpag:35,connect:[0,1,2,7,18,33,35,36],connect_info:10,consid:[33,35],consider:[35,37],consist:[4,26,29,33,35,36,37],consol:[0,3,4,7,8,9,13,14,17,18,21,23,25,29,30,32,35],consolid:35,constant:[12,33,35],constitut:37,constraint:33,construct:[33,37],constructor:[4,35],consult:[2,4,24,27,33],contact:35,contain:[0,16,24,29,32,33,36,37],container_class:35,content:[3,4,5,6,10,11,17,19,26,30,32,35],context:[4,5,8,15,17,20,33,37],continu:[25,30,32],contract:17,contrast:33,contribut:[2,35,37],control:[2,3,4,9,21,25,32,34,36],conveni:[10,33,35,37],convent:[4,37],convert:35,cookbook:10,cookicutt:35,cookiecutt:35,cool:33,copi:[0,2,5,8,10,13,16,17,20,21,23,26,29,30,32,33,35,37],cordoba:24,core:[0,4,24,30,32,35,36],corner:[7,21,33,35,37],corr:33,correct:[1,32,33,37],correctli:[0,37],correl:[33,37],correspond:[4,5,10,11,12,16,25,32,33,35,36,37],could:[33,35,36,37],couldn:27,count:[4,14,35,37],countdown:35,counter:35,coupl:[23,32,33],cours:[23,33,37],cov:33,covari:33,cover:1,coverag:35,cpr:[27,28],cpu:0,crash:27,creat:[0,2,4,5,9,10,12,13,17,20,21,23,25,26,33,34,36,37],create_act:35,create_menu:35,create_spinbox:35,create_toolbutton:35,creation:35,criteria:17,critic:[14,37],crowdin:1,crucial:37,crypto:33,crypto_hist:33,crypto_list:33,csv:[32,33,37],ctrl:[3,4,7,10,11,12,30,33,35],cumprod:33,currenc:33,current:[0,1,2,3,4,8,10,12,13,14,15,17,21,25,26,32,33,35,37],current_year:33,cursor:[0,4,12,21,32],curv:37,custom:[2,3,4,5,12,13,16,21,23,31,32,36],customiz:16,cycl:[13,35],cython:[2,10,25,33,37],d_age:37,d_religion_serios:37,daemon:10,dai:[24,33],dark:30,dash:37,data:[1,2,4,10,14,17,28,32,34,35,36],data_1:33,data_2:33,datafram:[2,4,33,37],dataset:34,datatyp:17,date:[0,1,2,5,8,23,25,32,33,37],datetim:32,deactiv:[3,13,17],deadlin:35,deal:33,deb:2,debug:[1,4,9,26,28,37],debugg:[9,10,17,20],decad:33,decim:[17,33],declar:[4,35],declin:33,decor:[4,19,35],decreas:[33,35],dedic:[0,2,4,33,35,37],deep:[0,1,37],deeper:17,def:[33,35],defin:[3,4,6,30,32,33,35,37],definit:[4,12,35],degre:37,delet:[5,8,23,30,33,35,37],delimit:33,delta:14,demo:30,demograph:37,demonstr:30,denomin:33,denot:36,densiti:37,depend:[0,2,23,29,33,35,37],deprec:10,depth:[1,35],deriv:35,describ:[0,2,4,25,26,29,33,37],descript:[1,2,4,16,27,29,33,35,37],deserv:35,design:[1,33,35,36,37],desir:[4,10,16,17,33,35,37],desktop:[35,36],despit:33,detail:[0,1,2,10,16,23,27,29,33,35,36],detect:[16,32,37],determin:[4,14,32],detract:37,dev0:35,dev:[0,2,35],develop:[0,1,24,30,33,34,36,37],deviat:[4,37],dfd:37,dfn:37,diagnos:[23,29],diagram:37,dialog:[0,2,4,10,14,16,17,25,26,27,29,30,35],dictionari:[33,35],did:[29,33,35,37],diff:[14,32,35],differ:[1,3,4,5,17,23,26,30,32,33,35,36,37],differenti:37,difficult:[29,37],difficulti:[2,29],dimens:17,dimension:17,diminish:33,dir:10,direct:[2,16,35],directli:[5,7,10,11,16,17,24,26,29,30,32,33,37],directori:[3,4,5,6,8,10,15,16,21,23,25,26,30,32,33,35],disabl:[4,7,12,13,16,26,32,35],disappear:26,discard:37,discourag:10,discov:[30,32,37],discuss:[2,24,33],disk:[2,14,26,33],dismiss:36,dispers:37,displai:[0,2,3,4,5,6,7,8,10,12,13,14,17,19,20,25,29,32,33,35,36,37],display_tim:35,disproven:37,disrupt:10,dist:35,distinct:[4,33],distinguish:37,distribut:[0,5,15,23,24,27,33,35],distro:[0,2],divid:[4,30,33],doabl:23,doc:[4,11,22,23,24,32,35],dock:[2,35],dockabl:[35,36],docstr:[0,7],document:[2,4,7,10,11,13,16,25,30,32,33,35,36,37],doe:[0,2,16,26,29,33,35,37],doesn:[0,1,4,16,23,25,26,32,33],dog:37,dog_or_cat:37,dog_or_cat_col_nam:37,dog_or_cat_pivot:37,dog_or_cat_sampl:37,doi:37,doing:[23,30],dollar:33,don:[0,1,17,20,23,25,30,32,33,35,37],done:[23,33,35,37],dot:[33,37],doubl:[2,4,5,10,14,17,26,29,30,32,33,37],doubt:[35,37],down:[3,4,11,14,23,30,32,33],download:[0,30,32,35],downward:37,dpi:33,drag:[2,4,30],draw:[33,37],drawn:33,drive:0,drop:[4,11,30,33,37],dropdown:[0,4,6,14,16,30,32,33,37],dropna:[33,37],dtype:[33,37],dual:0,due:[2,23,25,33,35,37],duplic:[17,29,36],durat:35,dure:[13,33,35],dynam:[7,11,25],each:[0,1,3,4,5,6,8,10,12,14,17,20,30,32,33,35,36,37],earli:33,earlier:[2,35,37],earn:33,eas:[32,35],easi:[1,2,4,8,25,33,37],easier:[4,33,35,37],easiest:[0,1,30],easili:[2,3,4,6,7,10,14,15,16,17,25,30,32,33,35,37],econometr:33,ecosystem:2,edit:[1,2,3,9,16,17,20,30,32,33,35,36,37],editor:[0,3,5,6,7,8,9,10,12,13,14,15,16,17,20,21,25,30,32],effect:[0,2,33],effici:[4,32],effort:35,either:[0,1,4,10,17,19,23,25,26,29,33,35,36],elaps:10,element:[4,12,14,17,30,33,35,36,37],elementari:33,elimin:33,els:[14,26,27,29],elsewher:[23,29,32],email:35,embed:36,emerg:[27,28,37],emit:36,empir:37,emploi:37,employe:0,empti:[4,37],enabl:[2,3,4,6,7,10,13,14,26,32,33,35,37],encapsul:35,encount:[2,25],encourag:[1,33],end:[0,16,32,33,35,37],end_i:33,end_year:33,endpoint:35,engin:[1,33,37],enhanc:[0,1,3,10,23,34],enjoi:30,enorm:16,enough:33,ensur:[2,33],enter:[0,3,4,6,7,8,10,11,14,15,16,17,20,26,29,30,32,33,35,37],entertain:33,entir:[4,15,17,30,32,33,37],entri:[2,4,12,15,16,30,32,35],entry_point:35,env:[0,2,23,37],environ:[0,1,10,11,17,23,24,25,27,29,32,34],equal:[33,37],equival:0,eras:6,error:[0,2,4,14,16,23,26,27,28,29,32,36,37],especi:[22,24,25,33,35,37],essenc:[33,37],essenti:33,establish:37,estim:[33,37],etc:[0,2,4,15,17,33],etc_hist:33,etern:37,eth:33,ethereum:33,evalu:32,even:[17,23,24,33,35,37],event:3,eventu:35,ever:30,everi:[3,4,12,14,23,24,32,35,36],everyon:[1,27,30,32],everyth:[0,2,23,29,30,32,33,35,37],evid:37,exact:14,exactli:[3,29],examin:[29,37],exampl:[0,3,4,13,14,16,17,30,32,33,35,37],exceed:33,excel:[33,37],except:[2,26,33,37],exchang:35,exclam:3,exclud:6,execut:[0,1,3,4,8,10,14,16,17,19,20,25,26,30,32,33,35,37],exercis:35,exist:[0,2,4,10,15,16,17,23,27,32,33,35,37],exit:0,exp_real_ret:33,expand:[5,6,10,12,14,16,17,32],expect:[23,29,35,37],expected_pr:33,experi:[1,4,33,35,37],experienc:[2,24,27,29],experiment:2,expert:[2,23,24],explain:[29,35,37],explan:37,explor:[1,2,3,4,9,10,11,13,15,20,23,26,27,30,32,34,35],expos:35,express:[4,6,10,32,37],extend:[35,36],extended_output:33,extens:[5,6,14,20,32,35,36],extent:[33,37],extern:[0,2,4,5,9,32],extra:35,extract:[33,37],f10:[14,32],f12:3,f_critic:37,f_onewai:37,f_valu:37,face:2,facilit:35,fact:[33,35,37],factori:0,fail:[14,16,26],fairli:[25,37],fals:[33,35,37],famili:33,familiar:[1,3,22,27,30,32,33,37],faq:2,far:37,fast:[3,37],faster:[2,32,35,37],fastest:33,favor:33,favorit:[33,35],featur:[0,1,2,6,7,9,13,17,20,23,24,30,32,33,36,37],fedora:2,feel:[35,37],few:[2,25,35,37],ffill:33,field:[0,6,10,11,14,16,32,35,37],fifth:35,fig:[33,37],fig_dim:37,figsiz:[33,37],figur:[3,4,13,27,30,32,33,37],file:[0,2,3,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,23,25,26,30,32,33,35,36],filenam:[5,6,14,16,32],filesystem:5,fill:[10,29,36],filter:[5,6,17,37],financ:33,financi:[34,35,37],find:[0,5,7,9,11,16,17,22,23,24,26,29,30,32,33,35,37],find_crypto_pair:33,finish:[35,37],firewal:26,first:[0,1,2,10,14,17,25,26,28,29,31,32,34,37],fit:[32,33,36,37],fivethirtyeight:33,fix:[0,1,2,23,25,26,27,29,32,35,37],fixm:16,flag:4,float64:33,flow:3,fluctuat:33,fly:4,focu:35,focus:[0,10],folder:[0,2,5,8,10,15,16,23,25,32,35],follow:[0,1,2,4,12,19,20,21,23,25,26,27,29,30,33,35,36,37],followup:14,font:[4,11,30,33,35,36],forecast:33,forg:[0,2,19,20,21,23,33,35],forget:33,form:[29,36],formal:[33,35],format:[5,7,13,17,29,32,33,35],formatt:33,former:24,forti:17,fortun:[35,37],forum:23,forward:[11,13],found:[0,6,23,33,35,37],four:[30,32,35,37],fourth:35,fpalm:35,fragment:4,framework:[35,36],francesco:35,francisco:35,free:[0,1,24,35],freedom:37,freeli:[0,30],frequenc:[33,37],frequent:[1,25,33,37],fresh:[2,10,23],friendli:35,from:[0,3,4,5,6,7,8,10,11,13,15,16,17,19,20,23,24,26,28,29,30,32,33,35,36],from_dict:33,front:36,full:[0,2,4,7,8,10,12,16,23,24,29,33,35,37],full_nam:35,fulli:[0,2,3,17,29],fun:[33,37],fundament:[34,35],further:[2,23,26,30,32,34,36],furthermor:[3,17],futur:[2,6,19,20,21,26,30],gadget:36,gain:33,gather:37,gear:0,gender:37,gener:[0,2,3,4,11,13,16,17,24,25,27,29,30,32,35,36,37],gentoo:2,get:[0,1,2,9,10,11,22,23,24,25,26,27,29,31,32,33,34,37],get_conf:35,get_contain:35,get_descript:35,get_icon:35,get_nam:35,get_path:26,get_plugin:35,get_tooltip:35,get_transl:35,get_valu:35,git:[5,14,15,35],github:[1,2,23,27,29,35],github_org:35,github_usernam:35,gitk:15,gitter:2,give:[4,5,16,17,27,33,35,36,37],given:[0,2,3,5,14,15,25,33,35],glass:11,global:[3,16,17,32],gmail:35,gnu:[2,8,35],goal:34,going:[21,30,32,33,35,37],gone:32,good:[23,26,27,29,33,35,37],goog:33,googl:[2,29,33,37],got:24,graham:33,graph:[33,36,37],graphic:[2,3,10,13,33,35,36,37],great:[2,24,37],greater:37,green:[30,32,35,37],grew:33,grid:17,gross:33,group:[2,12,33,36,37],group_bi:33,groupbi:37,grow:33,growth:33,guarante:17,gui:[3,10,17,23,35,36],guid:[0,1,7,22,23,24,29,30,33,35,37],guidelin:[23,33,35],guru99:35,had:33,hamburg:[4,7,8,35],hand:[33,37],handi:4,handl:[23,35,37],handler:36,happen:[17,29,33,36,37],happi:[30,32],harpercollin:33,has:[0,3,4,7,10,15,17,24,27,29,32,33,35,36,37],hasn:29,have:[0,1,2,3,4,7,10,11,15,16,17,19,20,21,24,25,26,29,30,32,33,35,36,37],header:17,heart:30,heat:17,heatmap:17,heavi:33,heavyweight:33,height:37,hello:[30,32,35],help:[0,4,9,10,23,26,27,28,29,30,32,33,35],helper:35,her:37,here:[0,2,7,22,28,29,30,32,33,35,37],hesit:35,hidden:[5,35],hide:[4,5,12,17,20,30,32],hierarch:[5,14,32],high:[0,33,35],higher:[33,37],highest:[33,37],highlight:[0,3,6,8,12,16,23,30,32,35],hilpisch:33,hint:[0,25],his:37,hist:[33,37],histogram:[17,37],histori:[3,9,10,16,30,33,35],historic_crypto:33,historicaldata:33,histplot:37,hit:[19,33,37],hold:[33,35],home:[0,2,8,10,11,23,24,25,35],homebrew:2,hope:[30,33,35,37],hopefulli:[26,27],horizont:[4,30,37],host:10,hostnam:10,hour:29,hous:11,hover:[0,4,9,25],how:[0,1,2,3,4,5,10,12,13,19,23,24,27,29,30,32,33,34,36],howev:[0,2,5,25,30,33,35,37],html:[35,37],http:[33,35,37],hub:24,huge:23,human:35,hurri:35,husl:37,hyperlink:32,hypothesi:34,icon:[4,7,8,9,11,13,30,32,35],icon_manag:35,id_rsa:10,ide:35,idea:[29,35,36],ideal:[17,33,37],ident:[0,6,14,23],identif:37,identifi:[14,32,35,37],idl:0,ignor:[3,37],ill:[0,27,28],iloc:[33,37],ima:35,imag:[2,4,13,17,33,37],immedi:[2,20,26,37],implement:[24,25,33,35,36,37],impli:37,implicitli:30,impos:15,imposs:23,improv:[0,4,17,31,37],includ:[0,1,2,3,4,5,7,10,11,12,17,24,25,28,30,32,35,37],incompat:[0,2],incomplet:25,inconceiv:35,inconsist:37,incorpor:35,increas:[14,32,33,35],inde:[27,37],indent:29,independ:[2,35],index:[11,17,32,33],indic:[14,17,30,32,33,35,36,37],indistinctli:37,individu:[2,7,14,16,19,23,27,35,37],industri:33,influenc:37,info:[2,20,23,33,35],inform:[0,2,10,14,17,20,23,24,26,29,30,32,35,36,37],infrastructur:0,inher:17,initi:[33,35,36,37],inlin:[0,3,7,10,32],inner:[17,23,35],inplac:[33,37],input:[20,35,36,37],insert:[0,17,29,35,37],insid:[0,4,5,10,11,14,15,20,21,26,32,33,35,36],insight:33,inspect:[0,1,7,10,17,33,35,37],inspector:17,instal:[1,3,10,11,14,18,23,24,26,27,29,30,32,33,35,37],instanc:[10,17,23,25,26,35,36],instanti:35,instantpopup:35,instead:[0,2,5,12,17,23,26,27,32,33,35,37],instruct:[0,2,23,33,35,37],instrument:33,insuffici:7,int64:37,integ:37,integr:[2,3,4,10,15,21,33,35,37],intel:2,intellig:[16,33,37],intend:[33,37],intens:0,interact:[1,3,4,10,13,17,20,21,22,23,30,32,33,35,36,37],interchang:17,interconnect:36,interest:[33,35,37],interfac:[1,8,9,20,22,30,35,36],interfer:26,intermedi:33,intern:[0,7,23,29,35],internal_valu:32,interpret:[0,3,7,9,10,21,23,25,26,29,32,33,37],interquartil:37,interrupt:[7,10],interv:[35,37],intro:34,introduc:35,introduct:[30,35],introspect:25,invalid:[16,32],invest:33,investig:37,investor:33,invis:[5,8],invok:37,involv:[1,2,23,25,29,33,35,37],ipdb:9,ipykernel:[23,25],ipynb:20,ipython:[0,3,4,7,8,9,13,14,17,18,21,23,24,25,27,29,30,32],ipython_genutil:0,is_dark_font_color:32,isc:35,isn:[2,23,25,26,32],isol:[2,28],issu:[0,1,2,4,16,21,23,24,26,27,28,32,33,37],item:[0,1,4,9,12,14,17,19,20,21,23,25,29,32],iterrow:37,its:[0,1,2,4,5,7,10,11,12,14,16,17,23,24,25,26,29,30,32,33,35,36,37],itself:[0,2,10,14,17,23,24,26,33,35,36],jame:33,jnj:33,job:35,john:35,johnson:33,join:33,json:[0,10,37],juanita:[30,32],jump:[4,12],jupyt:[4,10,20,23,35,37],jupyter_cli:[23,25],jupyter_cor:[23,25],just:[0,2,3,8,11,12,15,16,17,21,23,26,27,30,32,33,35,37],kde:37,keep:[23,32,33,35,37],kei:[7,9,14,17,22,25,29,30,33,35],kera:37,kernal:10,kernel:[0,9,23,27,28,33,35,37],keyboard:[3,9,10,23,35],keyerror:37,keyfil:10,keyword:[4,11,32],kind:[32,33,35,37],kirkegaard:37,kitti:37,know:[23,32,33,35,37],knowledg:[33,35,37],known:[2,26,36],kurtosi:37,label:[0,35],lack:2,lambda:[33,37],languag:[0,1,2,4,10,23,24,25,33,35,37],larg:[0,17,24,32,33,37],larger:[32,33,37],largest:33,last:[4,8,15,23,25,26,27,33,37],later:[17,30,37],latest:[0,2,23,25],latter:[7,24],laugh:37,launch:[0,2,5,10,23,25,26,27,29,30,32,37],launchpad:2,layer:35,layout:[30,35],lead:[2,24,29],learn:[0,1,2,14,24,31,32,34],learner:34,learnpython:24,least:[0,24,26],leav:[33,37],left:[2,3,4,6,7,8,11,14,21,26,30,33,35,37],legaci:[10,35],len:[33,37],length:33,leptokurt:37,less:[29,33,35,37],lesser:33,let:[4,30,32,33,34,37],letter:[0,33,36],level:[1,4,12,14,16,17,32,33,35,37],leverag:33,librari:[2,3,11,25,30,32,33,35,36,37],libreoffic:32,licens:[0,35],lie:25,lies:[23,27],life:35,light:30,lighter:2,like:[0,2,3,4,5,8,11,14,15,16,17,23,25,27,29,30,32,33,35,37],limit:[4,21,25,35,37],limits_group:35,line:[0,2,3,6,8,14,16,18,23,25,26,27,29,30,32,33,35,36,37],linear:33,linestyl:37,linewidth:37,linger:23,link:[2,11,24,33,35],linux:[0,8,16,23,25,35,37],list:[0,3,4,5,6,8,10,11,12,13,14,16,20,23,24,25,27,29,30,32,33,35,37],listen:10,lite:2,litecoin:33,littl:37,load:[7,10,11,14,17,25,32,33,35,37],loc:33,local:[3,11,14,17,20,32,33,35,37],locat:[0,4,6,11,12,15,29,35],lock:[7,30],log:[33,35],logarithm:33,logger:35,long_descript:35,long_description_content_typ:35,longer:[17,32,35],longest:32,look:[2,10,11,16,20,23,24,27,29,30,32,33,35,37],loop:[33,36],loss:33,lost:[33,37],lot:33,lousi:33,lovabl:37,lover:37,low:33,lower:[23,32,33,37],lowercas:33,lowest:[33,37],lsp:[0,4,35],ltc:33,ltc_hist:33,lxml:33,mac:23,machin:[0,10,17,23,32,33,35,37],maco:[0,3,8,10,16,19,20,21,23,25,30,33,35,37],macport:[0,2,29],made:[4,35,37],magic:3,magnifi:11,mai:[0,2,23,25,26,32,33,35],main:[0,2,17,30,31,35,36],main_contain:35,main_fg_color:35,main_sect:35,mainli:[33,37],maintain:[0,24,35],mainwindow:[26,32,36],major:[2,23,35],make:[0,2,4,5,8,11,15,20,21,23,25,26,27,29,32,33,35,37],makefil:35,malici:17,mamba:[2,35],mambaforg:2,manag:[0,1,2,5,10,17,23,24,32,33,35,37],mandatori:35,mani:[0,2,4,5,10,19,23,24,27,30,33,36,37],manipul:[33,35,37],manual:[0,2,4,7,13,14,16,17,25,26,29,32,33,35,37],map0logo:35,map:[0,17,35],mapologo:35,mark:[8,17,35,37],markdown:35,market:33,master:33,match:[4,5,6,11,13,17,30,32,37],math:[10,30,33],mathemat:33,matlab:4,matplotlib:[0,2,9,10,17,24,30,32,33,37],matpotlib:2,matrix:36,matter:[33,37],matur:37,max:[17,33,37],max_:35,max_ag:37,max_ylim:37,maxim:[29,33],maximum:[6,33,37],mdi:35,mean:[0,1,2,23,25,26,32,35,36,37],meanwhil:14,measur:[14,32,33,35,37],median:37,meet:35,memori:[0,2,14,33,37],mention:[0,22,25,35,36],menu:[0,2,3,4,6,7,9,11,14,15,19,20,21,23,25,29,30,32,35,37],mere:37,merg:33,messag:[0,2,10,16,23,25,27,29,32,35,36],message_nam:16,met:37,meta:2,metapackag:2,method:[0,4,7,12,14,23,25,26,27,32,33,35,36],microsoft:33,might:[0,2,8,16,23,24,25,29,32,37],mile:37,millisecond:[19,35],min:[17,33,35,37],min_:35,min_ag:37,min_ylim:37,mind:[35,37],miniconda:[0,2,33,35,37],miniforg:[0,2],minim:[0,2,33,35,37],minimum:[33,35,37],minor:[23,35],mint:2,minut:35,miss:[2,29,35,37],misunderstand:24,mit:35,mix:2,mixin:35,mkdir:37,mkvirtualenv:2,modal:36,mode:[3,4,9,35],model:[0,33,37],modern:0,modest:[2,33,37],modifi:[0,4,5,10,17,20,30,35,37],modul:[3,7,9,11,15,16,25,32,35],moment:[19,20,21,35],monei:33,monitor:30,month:[23,33],monthly_data_1:33,monthly_data_2:33,more:[0,1,2,4,10,12,14,16,17,19,21,23,24,25,29,30,32,33,35,36,37],most:[0,2,4,14,22,23,25,26,27,30,32,33,35,36,37],mostli:35,mous:33,move:[5,11,30,32,33,35,37],movement:33,mpl:33,msft:33,much:[0,2,4,17,23,29,32,33,35,37],multi:[4,17],multiindex:17,multilin:3,multipl:[4,5,12,37],multiplatform:[35,36],multipli:33,multitask:33,must:[0,10,15,19,33,35,37],mute:[10,32],mvp:33,name:[0,2,3,4,5,7,10,11,12,14,15,16,17,20,25,30,32,33,35,36,37],namespac:[4,10,17],narrow:23,nativ:[13,35,36],natur:[33,37],navig:[0,2,6,8,9,11,12,23,26,30,32,33,35,36],neat:37,necessari:[10,30,32,35],need:[0,1,2,4,6,8,10,25,26,29,33,35,36,37],neg:[33,37],neither:37,neovim:4,nest:12,netflix:33,netflix_info:33,network:[0,35,36],never:30,newer:[2,24],newest:10,newli:[35,37],next:[2,4,10,19,21,25,30,32,33,35,37],nflx:33,non:[0,8,32,33,35,36],none:[4,13,23,25,26,35],nor:37,norm:33,normal:[3,8,33,37],notabl:33,notat:37,note:[0,10,30,32,33,35,37],notebook:[0,4,10,18,24,25,37],noth:[0,14,25,37],notic:[32,33,35,37],notif:[35,36],notifi:36,now:[0,2,19,30,32,33,35,37],nowadai:33,npy:17,num_group:37,num_observ:37,number:[2,3,4,5,6,8,10,14,16,17,19,24,25,32,33,35,37],numer:[2,17,37],numfocu:0,numpi:[2,10,24,30,32,33,37],object:[0,4,7,9,10,11,14,30,32,33,37],observ:[26,29,33,37],obtain:[2,19,30,34,37],obviou:35,occasion:[25,26],occupi:[33,37],occur:[0,14,25,27,29,37],occurr:[6,8,32],odp:37,off:[7,10,13,16,32],offer:[2,3,4,5,13,17,23,24,32,33,35,36,37],offici:[33,35,37],offset:33,often:[2,10,23,27,29,30,37],okai:35,okcupid:37,old:[2,37],older:[2,30,37],on_clos:35,on_conf_chang:35,on_initi:35,on_plugin_avail:35,on_preferences_avail:35,on_statusbar_avail:35,on_toolbar_avail:35,onc:[0,4,5,10,15,25,26,29,30,32,33,35],one:[0,1,2,4,5,10,12,13,15,16,17,23,25,26,29,30,32,33,35,36,37],ones:[4,20,30,32,37],onli:[0,2,4,5,6,7,10,14,17,23,25,26,27,32,33,35,36,37],onlin:[7,9,32,37],open:[0,1,2,3,4,5,6,7,10,11,12,14,15,16,17,20,21,25,26,27,29,30,32,33,35,36,37],open_source_licens:35,opencollect:0,opensus:2,openteam:2,oper:[0,2,8,9,15,30,32,33,35,37],opt_weight:33,opt_weights_1:33,opt_weights_2:33,optim:[14,31,35],optimal_weight:33,option:[0,2,3,4,7,9,15,18,21,23,24,30,32,33,35,36,37],option_correct:37,order:[1,8,12,19,20,21,23,29,33,35,37],org:[2,33,35,37],organ:[0,33,35,36],orient:[2,33,37],origin:[23,25,37],other:[0,3,4,8,10,14,16,17,23,24,26,27,29,30,32,33,35,36,37],otherwis:[0,2,10,25,29,33,35],our:[0,2,22,23,24,27,29,30,32,33,34,37],out:[1,2,4,11,16,20,21,23,25,27,29,30,32,33,37],outlier:37,outlin:[4,9,30,32,33],output:[4,14,16,23,26,29,30,35,37],outsid:[4,20,25,37],over:[4,5,7,14,30,32,33,35,36,37],overal:[16,32],overflow:[0,23,27],overli:37,overrid:[25,35],overview:[33,37],own:[0,2,4,7,11,14,23,24,27,30,33,35,36],owner:37,p_valu:37,packag:[0,1,2,3,10,11,15,16,19,23,24,25,26,27,29,32,33,37],packt:33,pad:20,page:[0,2,10,11,23,29,32,34],paid:[0,24],palett:37,palm:35,palplot:37,pan:3,panda:[2,17,24,32,33,37],pane:[0,1,19,20,21,22,23,25,29,30,31,35],panel:[2,12,30,33,36,37],paper:[35,37],parallel:36,paramet:[4,33,35,37],parent:[14,35,36],parenthes:37,parenthesi:[4,7],parquet:37,pars:[6,32],parsed_data_publ:37,parser:32,part:[0,4,5,22,26,33,35,37],parti:[2,3,10,11,32,35],partial:37,particip:[33,35,37],particular:[14,23,32,35,37],particularli:[2,5,23,24,26,32,33],partit:0,pass:[33,35,36,37],password:[10,35],past:[5,10,13,16,17,20,21,29,32,35],patch:28,path:[0,4,5,10,12,14,15,16,19,23,26,30,32,33,35,37],pathlib:35,pattern:5,paus:[26,35],pause_pomodoro_tim:35,pause_tim:35,pause_timer_act:35,pct_chang:33,pdb:3,peopl:[33,37],pep:4,per:[0,4,19,33],percent:33,percentag:[19,33],perfect:33,perform:[0,5,11,14,15,17,23,32,33,35,37],period:[33,35,37],permiss:26,persist:[17,33,37],person:[2,35,37],pet:37,pfe:33,pfizer:33,phenomenon:37,phrase:8,pick:37,pickl:17,pictur:35,pid:10,piec:[33,35,37],pin:2,pip:[0,23,25,29,33,35],pitfal:23,pivot:37,plabel:35,place:[0,4,19,23,24,27,33,35,37],plai:35,plain:[7,16,29,30],plan:35,platform:[2,28,33,37],pleas:[2,23,25,27,29],plot:[3,4,9,10,17,20,30,32,35],plt:[33,37],plu:[6,20,32],plug:25,plugin:[0,2,9,19,20,21,24,27,28,34,36],plugin_registr:35,plugin_typ:35,pluginconfigpag:35,pluginmaincontain:35,pluginmainwidget:35,png:[13,32],point:[0,3,14,24,30,33,35,36,37],pointi:37,polar:33,polish:37,pomodoro_button:35,pomodoro_default:35,pomodoro_limit:35,pomodoro_menu:35,pomodoro_spin:35,pomodoro_tim:35,pomodoro_timer_button:35,pomodoro_timer_menu:35,pomodoro_timer_statu:35,pomodoro_timer_toolbar:35,pomodoromenusect:35,pomodorotimerstatu:35,pomodorotoolbaract:35,pomodorotoolbarsect:35,pop:[2,4,30],popular:[4,25,37],popup:7,popupmod:35,port:[2,10],port_1_exp_r:33,port_1_ow:33,port_1_sr:33,port_1_vr:33,port_2_exp_r:33,port_2_ow:33,port_2_sr:33,port_2_vr:33,portfolio:34,portfolio_return:33,portfolio_shap:33,portfolio_sharp:33,portfolio_volatil:33,portion:[7,29],pose:37,posit:[12,30,32,33,37],possibl:[4,19,20,21,23,27,29,33,35,37],post:[2,24,26],pot:35,potenti:[2,4,16,32,37],power:[1,4,16,20],powershel:21,ppf:37,pprint:33,practic:[16,32,35,37],pre:36,preced:29,precis:[33,37],predefin:35,predict:[33,37],prefer:[0,2,3,4,5,7,8,10,11,13,17,18,23,26,29,30,32,33,37],prefil:29,prefix:[35,37],prepar:34,prerequisit:34,presenc:35,present:[15,19,25,29,33,35],preset:35,press:[0,3,4,6,7,11,14,16,20,30,32,33,36,37],prettier:37,prev_year:33,prevent:[10,13,32],preview:[4,17,30],previou:[3,4,10,11,14,16,23,25,30,32,33],previous:[7,20,30,32],price:33,primari:[4,10,32,33],principl:35,print:[0,26,29,30,33,35,36,37],printf:17,prior:[33,35,37],prioriti:[2,29],probabl:37,problem:[0,1,2,4,16,24,26,27,28,29,32,33,35,37],proce:[2,33,37],procedur:[14,33,36],process:[3,4,10,23,35,36,37],processor:[0,13,32],produc:[13,37],product:[26,33,35],profil:[0,1,9,16,18,30,32,34,35],profit:[0,33],program:[2,5,21,23,24,27,30,32,33,35,37],progress:[14,35],prohibit:0,project:[0,1,4,5,6,9,12,32,35],project_nam:35,project_package_nam:35,project_pypi_nam:35,project_short_descript:35,prompt:[0,2,3,16,19,20,21,23,25,26,29,30,32,33,35,36,37],proofread:1,properli:35,properti:[33,35],proport:[33,37],protocol:[4,25],proven:37,provid:[1,2,4,10,11,13,17,23,24,25,26,29,30,32,33,35,36,37],proxi:37,psycholog:37,psychometr:37,pt_limits_layout:35,publish:[34,37],pure:7,purelib:26,purpos:[0,1,35,37],put:[33,35,37],py39:2,py3:[8,23,35],pyarrow:37,pyc:35,pycodestyl:4,pydata:[2,37],pydoc:11,pyenv:0,pyflak:4,pyl:[0,25],pylab:10,pylint:[16,32],pylintrc:[16,32],pypi:[0,33],pypi_usernam:35,pyplot:[33,37],pyqt5:2,pyqt:[23,29,35],pysid:35,python3:[2,26],python:[0,1,2,3,4,5,7,10,11,12,16,17,19,21,23,25,26,27,28,29,30,32,35],pythonpath:15,pyzmq:[23,25],q18154:37,q255:37,q997:37,qaction:[35,36],qapp:36,qapplic:36,qdialog:36,qdockwidget:35,qevent:36,qgridlayout:[35,36],qgroupbox:35,qhboxlayout:36,qicon:35,qmainwindow:[35,36],qmenu:36,qmessagebox:35,qspinbox:35,qstackedlayout:36,qt5:3,qt_mac_wants_lay:0,qta:35,qtawesom:35,qtconsol:[10,23,24,27,29],qtgui:35,qtimer:35,qtoolbar:36,qtoolbutton:35,qtpy:35,qtwidget:35,qu4nt:35,qualit:37,qualiti:[16,31],quansight:0,quantit:37,quantiti:17,queri:33,question:[1,2,24,27,33,37],question_data:37,quick:[2,20,24,30,33,37],quickli:[4,23,25,27,32,35,37],quickstart:[1,33,37],quirk:24,quit:[2,33,35,37],quotat:17,qvboxlayout:[35,36],qwidget:[35,36],rais:37,ram:0,ran:14,ranaroussi:33,random:[29,33,37],randomli:33,rang:[1,16,24,33,37],rapid:33,rate:35,rather:[12,21,23,29],ratio:37,raw:16,rcfile:16,rcparam:33,reach:[1,33,35,37],read:[2,4,23,26,27,34],read_csv:[33,37],read_parquet:37,read_text:35,readabl:[4,35,37],reader:35,readi:[20,30,32,33,35,37],readm:35,real:[4,10,25,33,35,37],realist:33,realiti:33,realized_pr:33,realli:[23,37],realtim:11,rearrang:30,reason:[2,14,32,37],recal:[3,14,32],receiv:[23,25,27,33,36],recent:[0,4,8,16,20,23,33,35],recogn:[0,35],recommend:[0,2,26,27,28,33,35,37],record:[26,33,37],recov:17,recreat:[2,33],recurs:14,red:[10,11,30,33],redistribut:0,reduc:[32,37],reduct:37,refactor:37,refer:[2,3,25,26,33,35,37],refin:6,reflect:33,refresh:[10,11,17,33],regardless:[4,15,35],regex:37,regist:10,register_plugin_prefer:35,regul:37,regular:[3,4,6,32,35,37],reilli:33,reinforc:33,reinstal:[0,26,27,28],rejoic:37,rel:[0,2,5,32,33],relat:[2,9,23,26,27,28,33,34,35,36],relationship:[33,35,37],relaunch:10,releas:[0,2,23,35],relev:[4,23,25,27,29,37],reli:35,reliabl:[2,17],reload:[9,11,35],remain:[32,37],remark:33,rememb:[8,10,16,33,35,37],remotemachin:0,remov:[0,2,10,13,14,17,23,30,32,35,37],renam:[5,10,17,21,25,33,35,37],rename_axi:33,render:[4,7,11,13,35,36],reoccur:23,reopen:23,reorder:4,repair:26,repeat:35,replac:[0,16,25,26],repo:[1,35],report:[0,2,23,25,26,27,28,34],repositori:[0,1,2,5,14,15,25,33,34],repres:[33,36,37],represent:36,reproduc:[23,29],request:[2,33,35],requir:[0,1,25,33,35,36,37],resampl:33,reset:[0,8,23,26,30,35],reset_index:33,residu:37,resiz:17,resolv:[1,2,23,25,26,35],resourc:[0,1,23,27,28,33,35],resp:37,resp_:37,resp_q18154:37,resp_q255:37,respect:[3,13,16,30,33,35],respond:35,respons:[36,37],rest:[14,30,32,33,35,37],restart:[0,8,10,19,20,21,23,25,30,35],restor:[4,15,23],restrict:0,result:[0,4,6,9,11,16,17,19,25,26,27,30,32,33,35,37],retriev:7,retrieve_data:33,rets_1:33,rets_2:33,reveal:37,review:33,rgb:17,rich:[2,7,30],right:[0,2,3,4,5,6,7,8,10,11,12,13,14,17,20,21,25,30,32,33,35,37],right_answ:37,rigor:37,ring:35,risk:33,riski:33,robust:2,room:24,root:[15,33,35],roughli:33,routin:26,row:[17,33,36,37],rule:[26,36,37],run:[1,3,5,9,10,11,16,17,19,20,21,23,25,26,29,30,32,33,35,36],runtim:[10,25,32],safer:33,sage:37,sai:[32,33,37],said:33,same:[1,2,3,4,10,14,15,20,23,25,27,30,32,33,36,37],sampl:[29,37],satisfi:37,save:[2,4,6,10,13,14,15,17,20,32,33,36,37],savefig:33,scalar:17,scale:[0,13,24,33],scatter:33,scenario:33,scheme:[23,35],scienc:[28,35,36,37],scientif:[0,1,2,32,33,34,35],scientist:[1,33,37],scikit:0,scipi:[2,28,33,37],scope:[6,14,16,19,35,37],score:[16,32,37],scraper:37,scratch:[17,20],screen:[20,25,36,37],screenshot:33,script:[0,2,4,5,10,16,19,23,30,32,33,37],scroll:[0,2,4,30,32],scrollbar:4,sdist:35,seaborn:37,seamlessli:[33,37],search:[2,4,9,11,17,24,29,32,33,37],second:[14,30,32,34,35,37],section:[0,1,2,4,16,23,25,26,27,29,30,32,33,35,37],secur:[2,17,26,33],see:[0,2,3,4,5,8,10,16,17,19,20,21,23,25,26,27,29,30,32,33,35,37],seek:2,seem:[25,33,37],seen:[30,33,37],segment:33,select:[0,2,3,5,6,7,8,10,12,13,16,17,19,20,21,25,29,30,32,33,35,36,37],self:[35,36,37],send:36,sens:33,sensit:[4,6,11],sep:37,separ:[3,4,10,12,16,30,33,37],sequenti:13,seri:[1,17,33,37],serif:33,seriou:37,serv:[20,33,35,36,37],servedoc:35,server:[0,4,11,20,25,35],servic:[0,24,35],session:[3,8,10,13,15,17,30,33,37],set:[0,1,2,3,4,5,6,10,12,15,16,17,21,26,30,32,34],set_axis_label:37,set_label:33,set_palett:37,set_pomodoro_limit:35,set_printopt:33,setcolumnstretch:35,setlayout:35,setmenu:35,setpopupmod:35,setup:[23,35],setup_pag:35,setuptool:35,sever:[3,4,5,10,13,17,29,30,32,33,35,36,37],sexual:37,shape:37,share:[33,34],sharpe_ratio:33,sharpli:33,shell:[21,23],shift:[0,3,4,12,33,35],shortcut:[0,2,3,7,8,9,10,14,16,23,26,32,35],shorten:36,shotgun:23,should:[0,16,17,23,25,26,27,29,30,35,37],show:[3,4,5,7,8,10,11,12,16,17,19,27,29,30,32,33,35,36,37],shown:[4,7,8,10,13,15,17,19,29,32,35],side:[33,35,37],sidebar:[4,32],sierra:0,sign:[4,12,33,37],signal:35,signific:[2,37],significantli:[33,37],silenc:32,sim_weight:33,similar:[0,2,4,10,23,29,33],similarli:35,simpl:[1,33,35,37],simpler:35,simpli:[0,2,7,10,17,25,26,27,29,32,35,37],simplic:37,sinc:[20,23,29,32,33,35,36,37],singl:[5,16,26,33,35,36],site:[0,24,35,37],situat:[0,29,33,37],six:[19,35],size:[2,4,5,11,13,17,30,32,33,37],skew:37,skill:[33,35],skip:[3,33,37],slabel:35,sleep:14,sleep_wrapp:14,slightli:37,slow:0,slower:33,smaller:[2,33,37],smallest:[14,33],smarter:37,smartscreen:2,smoother:33,snippet:[3,4],sns:37,softwar:[1,26,35],sold:33,solut:[25,27,28],solv:[0,1,2,23,26,27,29,33,37],some:[2,4,7,22,25,26,27,30,32,33,35,36,37],someon:27,someth:[23,24,25,26,27,33,36,37],sometim:[2,32,33],somewhat:[2,37],soon:29,sort:[4,12],sourc:[0,1,2,4,7,10,11,12,16,17,19,23,24,25,26,27,30,32,35],space:[2,4,32,35,37],speak:37,special:[9,12,25,29,33,35,36,37],specif:[0,2,3,4,5,10,11,16,23,24,25,27,29,32,33,35,36,37],specifi:[14,29,32,33,35,37],speed:[10,32],spend:35,spent:[14,19,32],sphinx:[7,35],spinbox:35,spinner:35,split:30,spoiler:37,sponsor:0,spot:4,spotlight:2,spydata:17,spyder3:2,spyder5:35,spyder:[3,4,5,7,8,10,14,15,16,17,22,26,27,28,29,31,34,36],spyder_kernel:[0,10],spyder_pomodoro_tim:35,spyder_unittest:25,spyderpomodorotim:35,spyderpomodorotimerconfigpag:35,spyderpomodorotimercontain:35,spyderwidgetmixin:35,squar:[11,33],ssh:10,sshd:10,stabl:[23,33,35],stack:[0,2,23,27,33,36],stage:[0,37],stai:[1,32,37],standalon:[0,19,20,21,29,33,35,37],standard:[0,3,4,11,16,17,23,25,27,32,35,36,37],start:[0,1,2,4,10,12,17,23,24,26,27,28,29,31,32,33,34,36,37],start_i:33,start_pomodoro_tim:35,start_tim:35,start_timer_act:35,start_year:33,startswith:37,startup:[2,26],stat:37,state:[17,35,37],statement:[3,8,14,35,37],statist:[33,37],statu:[25,30,35,36],statusbar:[0,35],statusbarwidget:35,std:33,steadi:33,step:[0,1,2,3,4,7,10,25,26,28,29,31,33],still:[0,2,3,10,25,27,32,33,37],stop:[0,2,3,10,11,14,16,35],stop_pomodoro_tim:35,stop_tim:35,stop_timer_act:35,store:[6,8,17,20,30,33,37],str:37,straightforward:[2,8],strict:2,string:[4,6,25,32,33,35,37],stroke:[13,33],stronger:19,strongli:[0,2,10,23,27],structur:32,style:[16,17,30,32,33,35,37],stylist:37,sub:[14,27,32],subdirectori:5,subject:2,submenu:25,submit:[0,1,2,24,26,27,28],subplot:37,subprocess:0,subscrib:2,subsect:[4,12],subset:37,substitut:[2,35],subsystem:0,succe:16,success:[0,35],successfulli:26,sudo:2,suffix:35,suggest:[3,23,33,37],suit:[5,11],suitabl:35,sum:[33,37],summar:[33,37],summari:[1,2,4,7,33,35,37],supervis:33,support:[0,2,4,8,9,17,19,23,25,27,33,37],suppos:[14,33],suppress:[16,32,33],sur:0,sure:[0,2,11,23,24,25,26,27,29,32,35,37],surround:13,svg:13,switcher:12,symbol:[10,33],symbols_1:33,symbols_2:33,symmetr:37,sympi:[2,10,24,33,37],synchron:32,syntax:[0,3,8,17,23,30,35],sys:[0,10,26],sysconfig:26,system:[0,2,5,8,10,15,21,23,26,29,32,35,36,37],systemat:37,tab:[0,3,5,10,12,13,19,20,21,30,32,33,36,37],tabl:[0,25,33],tag:35,tail:37,take:[0,1,19,20,29,30,32,33,35,37],taken:[14,19,32,33,37],talent:35,tar:35,task:[2,32,33,35,36,37],taskbar:2,tast:2,team:[2,24,29,35],technic:[10,37],techniqu:[26,35],technolog:33,tell:[27,32,35,37],templat:[4,29,35],temporari:20,ten:17,tend:[23,33],tensorflow:37,term:[0,33],termin:[0,2,16,18,19,20,23,25,26,32,33,35,37],test:[10,25,33,34],test_item:37,text:[0,4,5,6,7,8,16,17,21,30,32,35,36,37],textbox:7,than:[0,2,12,17,21,23,24,25,29,32,33,35,37],thank:[2,33,37],thei:[0,2,3,5,10,17,24,30,33,35,36,37],them:[2,3,4,5,6,7,13,14,17,19,20,24,29,30,32,33,35,36,37],theme:[0,4,30],themselv:37,theoret:[33,37],theori:[33,34],therefor:[2,14,32,33],thi:[0,1,2,3,4,5,6,7,8,10,12,13,14,15,17,19,20,21,23,24,25,26,29,30,32,33,35,36,37],thin:13,thing:[35,36,37],think:[34,35],third:[2,3,10,11,32,34,35,37],this_directori:35,thoroughli:30,those:[10,13,17,22,23,24,25,26,27,30,32,33,35,36,37],though:[2,23,30],thought:37,thousand:[32,33,35],three:[14,29,30,32,33,35,37],through:[0,1,2,3,4,6,7,10,11,13,17,22,24,32,35],throughout:[22,33,35,37],thu:[2,35,36,37],ticker:33,time:[3,4,10,14,15,19,25,26,29,32,33,35,36],timeit:3,timeout:35,timer:34,timestamp:[8,32],tip:35,titl:[11,29,33,35],to_datetim:32,todai:37,togeth:[33,35,37],toggl:[5,6,7,8],token:33,told:32,tolist:37,too:[16,17,20,30,37],took:[14,32],tool:[0,1,2,4,5,32,33,35,37],toolabr:35,toolbar:[0,3,4,5,9,12,16,30,32,33,37],toolbox:32,toolkit:[35,36],tooltip:35,top:[4,5,6,7,8,11,12,13,14,17,20,30,32,35],topic:[2,11,33,37],total:[4,14,19,32],touch:35,tour:22,toward:[14,33,37],tqdm:33,traceback:[25,26,27,29],track:[24,32],tracker:[1,2,23,27,29],trackpad:33,trade:33,traitlet:25,transact:33,transcript:[30,32],transform:[33,37],translat:35,transpar:37,treat:[4,17],tree:[15,35],trend:33,tri:29,triangular:37,trick:28,tricki:[2,27],trigger:[3,4,7,29,35,36],troubleshoot:[1,2,4,24,25,27,29],trust:17,tune:32,turn:[7,10,14,16,32],tutori:[1,7,30,33,35,37],tweak:35,twine:35,two:[4,14,17,30,32,33,35,36,37],type:[0,2,4,5,7,10,14,17,21,25,26,30,32,33,34,36,37],typic:[0,2,4,8,10,35],tzf:35,ubuntu:0,ultim:33,umr:10,unabl:[2,25],uncheck:[10,17,30,33],under:[0,2,3,4,5,6,7,10,13,14,16,17,19,20,21,23,25,26,29,30,32,37],undermin:37,underneath:14,understand:[4,9,24,30,32,33,35,37],understood:33,undesir:33,undivid:35,undock:[21,30,35],uninstal:[2,23,26,27],unintend:2,uniqu:[1,37],unit:[14,33],unittest:[0,25],unix:2,unless:[2,10,23],unlik:[4,27,29],unscientif:37,unsupervis:33,unsystemat:37,until:[23,33,35,36],unus:32,unusu:29,unzip:37,updat:[17,23,25,30,32,33,37],update_act:35,update_tim:35,upgrad:[2,23],upper:[21,33,35,37],uppercas:33,upward:37,url:35,usabl:0,usag:[2,9,14,24,29],usd:33,use:[0,1,2,3,4,5,7,10,11,12,13,15,19,20,21,23,24,30,32,35,36,37],used:[0,2,3,5,10,12,15,17,24,25,32,33,35,36,37],useful:[2,4,5,7,13,17,24,26,30,32,33,35,37],user:[0,1,2,4,6,8,10,15,16,20,23,24,25,26,27,30,32,35,36,37],usernam:[0,8,10,35],uses:[0,4,17,25,35],using:[0,2,3,4,5,7,12,14,16,17,19,20,21,23,24,25,26,30,32,33,35,36,37],usual:[0,2,10,23,26,35,36],util:[35,36,37],valid:[35,37],valu:[16,17,30,32,33,35,37],value_count:37,vari:33,variabl:[0,2,3,4,9,10,12,13,20,26,30,32,34,35],varianc:[33,37],variat:[33,37],varieti:[0,1,4,17,23,25,32,33,37],variou:[17,25,33,35],vast:37,vector:33,venv:[0,2,23],verbos:23,veri:[8,17,23,24,30,32,33,35,36,37],verifi:[35,37],versa:26,versatil:37,version:[0,2,9,10,21,23,29,30,33,35],vertic:[4,30,35],via:[0,2,3,7,10,15,17,26,35],viabl:2,vibrant:24,vice:26,video:[0,1,23,24,30,32],view:[3,4,5,6,8,11,12,15,16,19,20,21,23,25,27,29,30,32,33,35],viewer:[9,30],violat:[16,37],virtual:[0,2,35,37],virtualenv:[0,23],virtualenvwrapp:2,visibl:[16,25,32,36],visit:[0,1,2,11,14,23,33,35,37],visual:[1,17,33,34,35,36],vlayout:35,volat_ret:33,volum:33,vscode:[4,25],wai:[0,1,2,3,5,8,13,19,20,21,23,28,30,32,33,35,36,37],walk:22,want:[0,2,3,4,5,6,10,11,13,17,20,25,27,29,30,32,33,35,37],warn:[2,4,32,33,37],warren:33,watch:[0,1,23,35],web:[0,1,2,11,20,29,32,35],webpag:0,websit:[2,25,35,37],weight:2,weights_1:33,weights_2:33,weim:33,welcom:[2,20,22,23],well:[0,3,4,17,23,24,25,26,30,33,35,37],were:[23,33,35,37],what:[0,2,4,23,28,30,32,33,34,36,37],whatev:[4,23,25,33],wheel:35,when:[0,2,4,5,7,8,10,11,12,17,19,20,21,30,32,33,35,36,37],whenev:[0,10,23],where:[2,4,6,11,14,16,17,20,24,28,30,32,33,35,36,37],wherev:[13,23,32],whether:[8,10,15,25,29,33,35,37],which:[0,1,2,3,4,5,6,7,10,11,12,13,14,15,16,17,20,23,25,26,29,30,32,33,35,36,37],whisker:37,whitespac:32,whl:35,who:[2,30,33,37],whole:[0,4,16,32],why:[16,23],wick:37,wide:[1,35,37],wider:[0,32,37],widget_class:35,width:33,wiki:2,window:[0,3,8,16,19,20,21,23,25,26,29,30,32,33,35,37],winpython:[0,2],wish:19,within:[0,11,14,16,29,32,33,35,37],without:[0,2,5,7,10,15,16,25,30,32,33,35,37],wizard:2,won:[0,10,27,29],word:[4,8,13,32,34],work:[0,2,3,4,5,6,9,10,16,17,19,20,21,23,26,27,28,29,30,31,34,35],workaround:0,workflow:[7,30],workon:2,workshop:[33,35,37],world:[1,30,33,35,37],worri:37,worth:33,would:[4,14,23,30,33,35,37],wouldn:37,wrap:8,write:[32,33,34,35],written:[1,23,25,27,30,33,37],wrong:[26,32,37],wrote:35,wsl2:0,wsl:0,x64:0,xlabel:[33,37],yahoo:33,year:[33,37],yes:35,yet:[2,33],yfinanc:33,ylabel:[33,37],ylim:37,you:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,29,30,32,33,35,37],young:37,your:[0,2,3,4,5,6,7,8,10,11,13,14,15,16,17,19,20,21,23,24,25,26,27,28,30,31,33,34,37],your_usernam:[23,25],yourself:[17,23],yve:33,zeneca:33,zero:[33,35],zodiac:37,zoom:[3,11,13,20,21,32],zsh:21},titles:["Frequently Asked Questions","Welcome to Spyder\u2019s Documentation","Installation Guide","Debugger","Editor","Files","Find","Help","History","Panes in Depth","IPython Console","Online Help","Outline","Plots","Profiler","Projects","Code Analysis","Variable Explorer","Spyder Plugins","Spyder Line Profiler","Spyder Notebook","Spyder Terminal","Quickstart","Basic First Aid","Calling for Help","Common Illnesses","Emergency CPR","First Steps","Troubleshooting","Submit a Report","First Steps with Spyder","Intro Videos","Working with Spyder","Financial Data Analysis with Spyder","Workshops","Plugin Development with Spyder","Qt Fundamentals","Scientific Computing and Visualization with Spyder"],titleterms:{"class":4,"default":35,"final":[33,35,37],"function":[4,17,33],"import":7,"return":33,"try":2,Age:37,IDE:33,The:[35,37],Using:[0,2,6,8,10,11,15,16,19,20,21,33],With:[33,37],abil:37,about:0,action:[35,36],activ:37,add:35,addit:[2,20],advanc:[3,8,16,17,26],aid:23,all:25,altern:2,anaconda:[2,24],analysi:[4,16,33,37],analyz:16,anoth:25,anova:37,arrai:17,ask:0,associ:5,attributeerror:25,automat:[4,7],base:2,basic:[23,30,36,37],beyond:32,breakpoint:3,bug:25,build:[2,35,37],button:17,call:24,can:[35,37],cannot:25,carlo:33,cell:4,chang:[10,35],channel:24,check:35,choos:6,code:[1,4,16,32,33,37],cognit:37,command:[33,37],common:[25,26],commun:1,comparison:33,compat:25,complet:[4,25],compon:[4,36],comput:37,conda:[2,33,37],configur:[4,35],connect:[10,20],consol:[10,20,33,37],contain:35,contribut:1,control:[5,7,15,35],cpr:26,creat:[15,35],cryptocurr:33,custom:30,daili:33,data:[24,33,37],datafram:17,dataset:[33,37],debian:2,debug:[3,23],debugg:3,depend:25,depth:9,develop:[2,35],deviat:33,dialog:36,dictionari:17,directori:37,discov:35,distribut:[2,37],doc:1,docstr:25,document:[1,24],doe:25,download:[2,33,37],edit:4,editor:[4,33,37],emerg:26,enhanc:35,environ:[2,33,35,37],error:25,event:36,exchang:24,expect:33,explain:33,explor:[17,33,37],extern:10,faq:24,featur:[3,4,10,35],file:[4,5,37],financi:33,find:[4,6],first:[23,27,30,33,35],fit:13,format:[4,37],found:25,frequent:0,from:[2,27,37],fundament:36,further:[33,35,37],gener:33,get:[7,30,35],gitter:24,glanc:33,goal:[33,35,37],googl:24,group:24,guid:2,has:25,help:[1,2,7,11,24,25,37],here:27,highlight:4,histor:33,histori:8,homework:[33,35,37],hover:7,how:[35,37],hypothesi:37,icon:12,ill:25,importerror:25,improv:32,includ:29,incompat:25,inform:33,inlin:13,instal:[0,2,19,20,21,25],interest:1,interfac:4,interpret:14,intro:[31,33,37],introduct:[33,37],introspect:4,ipdb:3,ipython:[10,20,33,37],isol:23,issu:[25,29],item:11,join:1,jupyt:24,kei:4,kernel:[10,25],keyboard:4,layout:36,learn:[30,33,35,37],learner:[33,37],let:35,line:[4,19],lint:4,linux:2,list:17,local:10,look:1,lsp:25,maco:2,main:32,matplotlib:3,mean:33,media:1,menu:[5,8,10,12,13,16,17,36],method:[2,37],miss:25,mode:7,modul:10,mont:33,monte_carlo_sharp:33,monthli:33,mute:13,navig:4,notebook:20,now:1,numpi:17,object:[17,25],obtain:33,offici:24,onlin:[2,11],openteam:24,oper:5,optim:[32,33],option:[5,6,8,10,12,13,16,17,20],org:24,other:[2,25],our:[1,35],outlin:[12,13],overflow:24,packag:35,page:[24,35],pane:[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,32,33,37],panel:4,part:1,patch:23,pharmaceut:33,pip:2,platform:24,plot:[13,33,37],plugin:[14,18,25,35],pomodoro:35,pomodorotimertoolbar:35,portfolio:33,prefer:[21,35],prepar:[33,37],prerequisit:[33,35,37],problem:[23,25],profil:[14,19,33,37],project:[15,24],propag:35,publish:35,pypi:35,python:[24,33,37],qualiti:32,question:0,quickstart:22,ratio:33,read:[33,35,37],realiz:33,recommend:23,regist:35,reinstal:23,relat:[3,4,5,6,7,8,10,11,12,13,14,15,16,17,24,37],religion:37,reload:10,remot:10,replac:4,report:[29,37],repositori:35,research:37,resourc:24,result:14,review:35,run:[0,2,4,14,37],scienc:24,scientif:37,scipi:24,search:6,second:33,section:24,select:4,selector:4,serios:37,set:[33,35,37],share:37,sharp:33,shortcut:4,should:33,show:13,signal:36,simul:33,slot:36,social:1,solut:26,special:10,split:4,spyder:[0,1,2,18,19,20,21,23,24,25,30,32,33,35,37],spyderdockableplugin:35,spyderpluginv2:35,stack:24,standalon:2,standard:33,start:[25,30,35],step:[23,27,30,35,37],stock:33,stop:25,string:17,structur:35,style:4,stylish:37,submit:29,subreddit:24,support:[3,5,10,24],switcher:4,syntax:4,tab:4,tag:24,termin:21,test:[35,37],testpypi:35,theori:37,think:37,third:33,timelin:33,timer:35,toolbar:[11,13,17,35,36],translat:1,trick:26,troubleshoot:[0,23,28],type:35,ubuntu:2,understand:7,updat:[0,2,35],upload:35,usag:8,use:33,variabl:[17,33,37],version:[5,15,25],video:31,viewer:17,virtual:33,visual:37,volatil:33,wai:29,want:1,websit:24,weight:33,welcom:1,what:[29,35],where:[1,27],why:[33,37],widget:[35,36],window:[2,13,36],word:[33,35,37],work:[15,25,32,33,37],workshop:34,write:[1,37],yml:37,your:[1,29,32,35],youtub:24}}) \ No newline at end of file +Search.setIndex({"alltitles": {"1. With commands": [[37, "with-commands"]], "2. From an environment.yml file": [[37, "from-an-environment-yml-file"]], "A first glance at the portfolio": [[33, "a-first-glance-at-the-portfolio"]], "ANOVA test": [[37, "anova-test"]], "About Spyder": [[0, "about-spyder"]], "Actions, Toolbars & Menus": [[36, "actions-toolbars-menus"]], "Activate environment": [[37, "activate-environment"]], "Add a Configuration Page": [[35, "add-a-configuration-page"]], "Add actions to the toolbar": [[35, "add-actions-to-the-toolbar"]], "Additional Options": [[20, "additional-options"]], "Additional help": [[2, "additional-help"]], "Advanced features": [[3, "advanced-features"]], "Advanced functionality": [[17, "advanced-functionality"]], "Advanced options": [[16, "advanced-options"]], "Advanced tricks": [[26, "advanced-tricks"]], "Advanced usage": [[8, "advanced-usage"]], "Age": [[37, "age"]], "Alternative methods": [[2, "alternative-methods"]], "Anaconda base": [[2, "anaconda-base"]], "Anaconda help": [[24, "anaconda-help"]], "AttributeError/ImportError": [[25, "attributeerror-importerror"]], "Automatic formatting": [[4, "automatic-formatting"]], "Basic First Aid": [[23, null]], "Basic Qt Components": [[36, "basic-qt-components"]], "Beyond the main panes": [[32, "beyond-the-main-panes"]], "Breakpoints": [[3, "breakpoints"]], "Build and check the package": [[35, "build-and-check-the-package"]], "Build the test": [[37, "build-the-test"]], "Building our first plugin": [[35, "building-our-first-plugin"]], "Calling for Help": [[24, null]], "Choosing search options": [[6, "choosing-search-options"]], "Class/function selector": [[4, "class-function-selector"]], "Code Analysis": [[16, null], [37, "code-analysis"]], "Code Analysis (share a stylish code!)": [[37, "code-analysis-share-a-stylish-code"]], "Code analysis and completions": [[4, "code-analysis-and-completions"]], "Code cells": [[4, "code-cells"]], "Code completion": [[4, "code-completion"]], "Code navigation": [[4, "code-navigation"]], "Cognitive ability distribution": [[37, "cognitive-ability-distribution"]], "Common Illnesses": [[25, null]], "Common solutions": [[26, "common-solutions"]], "Comparison of expected and realized returns": [[33, "comparison-of-expected-and-realized-returns"]], "Completion/help not working": [[25, "completion-help-not-working"]], "Conda environment": [[2, "conda-environment"]], "Conda-based distributions": [[2, "conda-based-distributions"]], "Configuration defaults": [[35, "configuration-defaults"]], "Configuration page": [[35, "configuration-page"]], "Connect to a local kernel": [[10, "connect-to-a-local-kernel"]], "Connect to a remote kernel": [[10, "connect-to-a-remote-kernel"]], "Connecting an IPython Console": [[20, "connecting-an-ipython-console"]], "Control automatic import": [[7, "control-automatic-import"]], "Create a repository": [[35, "create-a-repository"]], "Create the Pomodoro Toolbar": [[35, "create-the-pomodoro-toolbar"]], "Creating a Project": [[15, "creating-a-project"]], "Customization": [[30, "customization"]], "Daily and monthly timelines": [[33, "daily-and-monthly-timelines"]], "Data Science Stack Exchange": [[24, "data-science-stack-exchange"]], "Data science/SciPy resources:": [[24, "data-science-scipy-resources"]], "DataFrames": [[17, "dataframes"]], "Debugger": [[3, null]], "Debugging and patching": [[23, "debugging-and-patching"]], "Debugging with ipdb": [[3, "debugging-with-ipdb"]], "Development builds": [[2, "development-builds"]], "Dialogs": [[36, "dialogs"]], "Dictionaries": [[17, "dictionaries"]], "Discovering Spyder plugins": [[35, "discovering-spyder-plugins"]], "Download cryptocurrencies data": [[33, "download-cryptocurrencies-data"]], "Download the code": [[33, "download-the-code"], [37, "download-the-code"]], "Download the data": [[33, "download-the-data"]], "Download the datasets": [[33, "download-the-datasets"]], "Downloading and installing": [[2, "downloading-and-installing"]], "Downloading the dataset": [[37, "downloading-the-dataset"]], "Editing features": [[4, "editing-features"]], "Editor": [[4, null], [33, "editor"], [37, "editor"]], "Emergency CPR": [[26, null]], "Enhancing our plugin": [[35, "enhancing-our-plugin"]], "Errors starting the kernel": [[25, "errors-starting-the-kernel"]], "Events": [[36, "events"]], "Expected and realized returns": [[33, "expected-and-realized-returns"]], "Explore the dataset": [[37, "explore-the-dataset"]], "Features": [[35, "features"]], "File associations": [[5, "file-associations"]], "File operations": [[5, "file-operations"]], "File switcher": [[4, "file-switcher"]], "Files": [[5, null]], "Final words": [[33, "final-words"], [35, "final-words"], [37, "final-words"]], "Financial Data Analysis with Spyder": [[33, null]], "Find": [[6, null]], "Find and replace": [[4, "find-and-replace"]], "First Steps": [[27, null]], "First Steps with Spyder": [[30, null]], "First portfolio": [[33, "first-portfolio"]], "Fit plots to window": [[13, "fit-plots-to-window"]], "Formatting the data": [[37, "formatting-the-data"]], "Frequently Asked Questions": [[0, null]], "Further reading": [[33, "further-reading"], [35, "further-reading"], [37, "further-reading"]], "General stock information": [[33, "general-stock-information"]], "Getting help": [[7, "getting-help"]], "Getting help by hovering": [[7, "getting-help-by-hovering"]], "Getting started": [[30, "getting-started"]], "Go to line": [[4, "go-to-line"]], "Help": [[7, null]], "Historical stock data": [[33, "historical-stock-data"]], "History": [[8, null]], "Homework": [[33, "homework"], [35, "homework"], [37, "homework"]], "How can Spyder help me in my scientific research?": [[37, "how-can-spyder-help-me-in-my-scientific-research"]], "How to test our plugin": [[35, "how-to-test-our-plugin"]], "IPython Console": [[10, null], [33, "ipython-console"], [37, "ipython-console"]], "Icons": [[12, "icons"]], "Improving your code quality": [[32, "improving-your-code-quality"]], "Install Guide": [[2, null]], "Installing and updating": [[0, "installing-and-updating"]], "Installing the Line Profiler": [[19, "installing-the-line-profiler"]], "Installing the Notebook": [[20, "installing-the-notebook"]], "Installing the Terminal": [[21, "installing-the-terminal"]], "Installing with Conda": [[2, "installing-with-conda"]], "Interested in translating Spyder?": [[1, "interested-in-translating-spyder"]], "Interface": [[4, "interface"]], "Interpreting the results": [[14, "interpreting-the-results"]], "Intro": [[33, "intro"], [37, "intro"]], "Introduction to financial analysis with Spyder": [[33, "introduction-to-financial-analysis-with-spyder"]], "Introduction to scientific research with Spyder": [[37, "introduction-to-scientific-research-with-spyder"]], "Introspection features": [[4, "introspection-features"]], "Isolating problems": [[23, "isolating-problems"]], "Issue with another dependency": [[25, "issue-with-another-dependency"]], "Join our community": [[1, "join-our-community"]], "Key components": [[4, "key-components"]], "Keyboard shortcuts": [[4, "keyboard-shortcuts"]], "LSP has stopped working": [[25, "lsp-has-stopped-working"]], "Layouts": [[36, "layouts"]], "Learner profile": [[33, "learner-profile"], [37, "learner-profile"]], "Learning Goals": [[35, "learning-goals"]], "Learning goals": [[33, "learning-goals"], [37, "learning-goals"]], "Learning the basics": [[30, "learning-the-basics"]], "Let\u2019s get started": [[35, "let-s-get-started"]], "Linting and code style": [[4, "linting-and-code-style"]], "Linux": [[2, "linux"]], "Lists": [[17, "lists"]], "Looking to contribute your code?": [[1, "looking-to-contribute-your-code"]], "Matplotlib support": [[3, "matplotlib-support"]], "Mean and standard deviation": [[33, "mean-and-standard-deviation"]], "Monte carlo simulation": [[33, "monte-carlo-simulation"]], "Monthly data": [[33, "monthly-data"]], "Mute inline plotting": [[13, "mute-inline-plotting"]], "Numpy arrays": [[17, "numpy-arrays"]], "Object cannot be found": [[25, "object-cannot-be-found"]], "Object missing docstring": [[25, "object-missing-docstring"]], "Object viewers": [[17, "object-viewers"]], "Obtain financial data": [[33, "obtain-financial-data"]], "Official Python help page": [[24, "official-python-help-page"]], "Online Help": [[11, null]], "OpenTeams support": [[24, "openteams-support"]], "Optimal cryptocurrency weights": [[33, "optimal-cryptocurrency-weights"]], "Optimal pharmaceutical stock weights": [[33, "optimal-pharmaceutical-stock-weights"]], "Optimal portfolio weights": [[33, "optimal-portfolio-weights"]], "Optimizing your code": [[32, "optimizing-your-code"]], "Options Menu": [[8, "options-menu"]], "Options menu": [[5, "options-menu"], [10, "options-menu"], [12, "options-menu"], [13, "options-menu"], [16, "options-menu"], [17, "options-menu"]], "Other distributions": [[2, "other-distributions"]], "Other issues": [[25, "other-issues"]], "Outline": [[12, null]], "Panes": [[9, null]], "Plots": [[13, null]], "Plots pane": [[33, "plots-pane"], [37, "plots-pane"]], "Plugin": [[35, "plugin"]], "Plugin Development with Spyder": [[35, null]], "Plugin Problems": [[25, "plugin-problems"]], "Plugin does not work at all": [[25, "plugin-does-not-work-at-all"]], "Plugins": [[18, null]], "PomodoroTimerToolbar": [[35, "pomodorotimertoolbar"]], "Preparation work": [[33, "preparation-work"], [37, "preparation-work"]], "Prepare portfolio data": [[33, "prepare-portfolio-data"]], "Prerequisites": [[33, "prerequisites"], [35, "prerequisites"], [37, "prerequisites"]], "Profiler": [[14, null]], "Profiler plugins": [[14, "profiler-plugins"]], "Project Jupyter": [[24, "project-jupyter"]], "Projects": [[15, null]], "Propagate configuration changes": [[35, "propagate-configuration-changes"]], "Publishing your plugin": [[35, "publishing-your-plugin"]], "PyPI and TestPyPI": [[35, "pypi-and-testpypi"]], "Python documentation": [[24, "python-documentation"]], "Python resources": [[24, "python-resources"]], "Python subreddits": [[24, "python-subreddits"]], "Qt Fundamentals": [[36, null]], "Recommended troubleshooting steps": [[23, "recommended-troubleshooting-steps"]], "Register the toolbar": [[35, "register-the-toolbar"]], "Registering preferences": [[35, "registering-preferences"]], "Reinstalling Spyder": [[23, "reinstalling-spyder"]], "Relate variables": [[37, "relate-variables"]], "Related panes": [[3, "related-panes"], [4, "related-panes"], [5, "related-panes"], [6, "related-panes"], [7, "related-panes"], [8, "related-panes"], [10, "related-panes"], [11, "related-panes"], [12, "related-panes"], [13, "related-panes"], [14, "related-panes"], [15, "related-panes"], [16, "related-panes"], [17, "related-panes"]], "Religion seriosity": [[37, "religion-seriosity"]], "Reload changed modules": [[10, "reload-changed-modules"]], "Report and share": [[37, "report-and-share"]], "Return, volatility and Sharpe ratio": [[33, "return-volatility-and-sharpe-ratio"]], "Returns and volatility": [[33, "returns-and-volatility"]], "Returns, volatility and Sharpe ratio": [[33, "returns-volatility-and-sharpe-ratio"]], "Review the changes": [[35, "review-the-changes"]], "Run ANOVA": [[37, "run-anova"]], "Run cell": [[4, "run-cell"]], "Run configuration": [[4, "run-configuration"]], "Run file": [[4, "run-file"]], "Run line/selection": [[4, "run-line-selection"]], "Running Spyder": [[0, "running-spyder"]], "Running code": [[4, "running-code"]], "Running from a standalone install": [[2, "running-from-a-standalone-install"]], "Running the Profiler": [[14, "running-the-profiler"]], "Running with Anaconda": [[2, "running-with-anaconda"]], "Running with Conda": [[2, "running-with-conda"]], "SciPy.org website": [[24, "scipy-org-website"]], "Scientific Computing and Visualization with Spyder": [[37, null]], "Second portfolio": [[33, "second-portfolio"]], "Set up Conda environment": [[33, "set-up-conda-environment"]], "Set up a development environment": [[35, "set-up-a-development-environment"]], "Setting up the Conda environment": [[37, "setting-up-the-conda-environment"]], "Setting up the virtual environment in Spyder": [[33, "setting-up-the-virtual-environment-in-spyder"]], "Setting up the working directory": [[37, "setting-up-the-working-directory"]], "Sharpe ratio": [[33, "sharpe-ratio"]], "Show plot outline": [[13, "show-plot-outline"]], "Signals & Slots": [[36, "signals-slots"]], "Special consoles": [[10, "special-consoles"]], "Split panels": [[4, "split-panels"]], "Spyder Gitter": [[24, "spyder-gitter"]], "Spyder Google Group": [[24, "spyder-google-group"]], "Spyder Line Profiler": [[19, null]], "Spyder Notebook": [[20, null]], "Spyder Terminal": [[21, null]], "Spyder and Spyder-Kernels version compatibility": [[25, "id1"]], "Spyder bug/dependency issue": [[25, "spyder-bug-dependency-issue"]], "Spyder for developers": [[35, "spyder-for-developers"]], "Spyder website": [[24, "spyder-website"]], "Spyder-Kernels not installed/incompatible": [[25, "spyder-kernels-not-installed-incompatible"]], "Spyder-related platforms": [[24, "spyder-related-platforms"]], "SpyderDockablePlugin": [[35, "spyderdockableplugin"], [35, null]], "SpyderPluginV2": [[35, "spyderpluginv2"], [35, null]], "Spyder\u2019s FAQ section": [[24, "spyder-s-faq-section"]], "Spyder\u2019s YouTube channel": [[24, "spyder-s-youtube-channel"]], "Stack Overflow tag": [[24, "stack-overflow-tag"]], "Standalone installers": [[2, "standalone-installers"]], "Steps": [[35, "steps"]], "Strings": [[17, "strings"]], "Submit a Report": [[29, null]], "Supported features": [[10, "supported-features"]], "Syntax highlighting": [[4, "syntax-highlighting"]], "Tabs": [[4, "tabs"]], "Terminal Preferences": [[21, "terminal-preferences"]], "The basic steps of the scientific method": [[37, "the-basic-steps-of-the-scientific-method"]], "The container": [[35, "the-container"]], "The dataset": [[37, "the-dataset"]], "The plugin structure": [[35, "the-plugin-structure"]], "Think of a theory and write a hypothesis": [[37, "think-of-a-theory-and-write-a-hypothesis"]], "Third portfolio": [[33, "third-portfolio"]], "Timer controls": [[35, "timer-controls"]], "Timer updates": [[35, "timer-updates"]], "Toolbar buttons": [[17, "toolbar-buttons"]], "Toolbar items": [[11, "toolbar-items"]], "Toolbar options": [[13, "toolbar-options"]], "Tour": [[22, null]], "Troubleshooting": [[0, "troubleshooting"], [28, null]], "Try Spyder online": [[2, "try-spyder-online"]], "Tutorials": [[31, null]], "Types of plugins we can develop in Spyder": [[35, "types-of-plugins-we-can-develop-in-spyder"]], "Ubuntu/Debian": [[2, "ubuntu-debian"]], "Understanding help modes": [[7, "understanding-help-modes"]], "Updating a standalone install": [[2, "updating-a-standalone-install"]], "Updating with Anaconda": [[2, "updating-with-anaconda"]], "Updating with Conda": [[2, "updating-with-conda"]], "Upload to PyPI": [[35, "upload-to-pypi"]], "Using Spyder": [[0, "using-spyder"]], "Using external kernels": [[10, "using-external-kernels"]], "Using pip": [[2, "using-pip"]], "Using the Find pane": [[6, "using-the-find-pane"]], "Using the History pane": [[8, "using-the-history-pane"]], "Using the Line Profiler": [[19, "using-the-line-profiler"]], "Using the Notebook": [[20, "using-the-notebook"]], "Using the Online Help": [[11, "using-the-online-help"]], "Using the Projects Pane": [[15, "using-the-projects-pane"]], "Using the Terminal": [[21, "using-the-terminal"]], "Using the code analyzer": [[16, "using-the-code-analyzer"]], "Using the monte_carlo_sharpe function": [[33, "using-the-monte-carlo-sharpe-function"]], "Variable Explorer": [[17, null], [33, "variable-explorer"], [37, "variable-explorer"]], "Version control support": [[5, "version-control-support"]], "Want to be part of our social media?": [[1, "want-to-be-part-of-our-social-media"]], "Want to help writing docs?": [[1, "want-to-help-writing-docs"]], "Ways to submit an issue": [[29, "ways-to-submit-an-issue"]], "Welcome to Spyder\u2019s Documentation": [[1, null]], "What to include in your report": [[29, "what-to-include-in-your-report"]], "What will we do?": [[35, "what-will-we-do"]], "Where to go from here": [[27, "where-to-go-from-here"]], "Where to go now?": [[1, "where-to-go-now"]], "Why do scientific research with Python?": [[37, "why-do-scientific-research-with-python"]], "Why should I use an IDE?": [[33, "why-should-i-use-an-ide"]], "Why use Python for financial analysis?": [[33, "why-use-python-for-financial-analysis"]], "Widgets": [[35, "widgets"], [36, "widgets"]], "Windows": [[2, "install-windows"], [36, "windows"]], "With commands": [[33, "with-commands"]], "Working with Spyder": [[32, null]], "Working with version control": [[15, "working-with-version-control"]], "Workshops": [[34, null]], "macOS": [[2, "macos"]], "monte_carlo_sharpe function explained": [[33, "monte-carlo-sharpe-function-explained"]]}, "docnames": ["faq", "index", "installation", "panes/debugging", "panes/editor", "panes/fileexplorer", "panes/findinfiles", "panes/help", "panes/historylog", "panes/index", "panes/ipythonconsole", "panes/onlinehelp", "panes/outline", "panes/plots", "panes/profiler", "panes/projects", "panes/pylint", "panes/variableexplorer", "plugins/index", "plugins/lineprofiler", "plugins/notebook", "plugins/terminal", "quickstart", "troubleshooting/basic-first-aid", "troubleshooting/call-for-help", "troubleshooting/common-illnesses", "troubleshooting/emergency-cpr", "troubleshooting/first-steps", "troubleshooting/index", "troubleshooting/submit-a-report", "videos/first-steps-with-spyder", "videos/index", "videos/working-with-spyder", "workshops/financial", "workshops/index", "workshops/plugin-development", "workshops/qt_fundamentals", "workshops/scientific-computing"], "envversion": {"sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["faq.rst", "index.rst", "installation.rst", "panes/debugging.rst", "panes/editor.rst", "panes/fileexplorer.rst", "panes/findinfiles.rst", "panes/help.rst", "panes/historylog.rst", "panes/index.rst", "panes/ipythonconsole.rst", "panes/onlinehelp.rst", "panes/outline.rst", "panes/plots.rst", "panes/profiler.rst", "panes/projects.rst", "panes/pylint.rst", "panes/variableexplorer.rst", "plugins/index.rst", "plugins/lineprofiler.rst", "plugins/notebook.rst", "plugins/terminal.rst", "quickstart.rst", "troubleshooting/basic-first-aid.rst", "troubleshooting/call-for-help.rst", "troubleshooting/common-illnesses.rst", "troubleshooting/emergency-cpr.rst", "troubleshooting/first-steps.rst", "troubleshooting/index.rst", "troubleshooting/submit-a-report.rst", "videos/first-steps-with-spyder.rst", "videos/index.rst", "videos/working-with-spyder.rst", "workshops/financial.rst", "workshops/index.rst", "workshops/plugin-development.rst", "workshops/qt_fundamentals.rst", "workshops/scientific-computing.rst"], "indexentries": {"pep 8": [[4, "index-0", false]], "python enhancement proposals": [[4, "index-0", false]]}, "objects": {}, "objnames": {}, "objtypes": {}, "terms": {"": [0, 2, 3, 4, 5, 6, 7, 10, 11, 13, 14, 15, 16, 17, 20, 21, 22, 23, 25, 26, 27, 29, 30, 32, 33, 34, 36, 37], "0": [0, 2, 14, 25, 33, 35, 37], "00": [33, 35], "000": 33, "000000": 33, "006954": 33, "008778": 33, "009126": 33, "01": [14, 33], "018784": 33, "02": 33, "020698": 33, "023033": 33, "023134": 33, "029931": 33, "02d": 35, "03": [33, 37], "04": 0, "042060": 33, "044063": 33, "05": 37, "053174": 33, "0583": 33, "058395": 33, "06": 33, "061057": 33, "062207": 33, "063068": 33, "0809": 33, "081239": 33, "082308": 33, "1": [0, 25, 30, 33, 35], "10": [0, 25, 30, 32, 33, 37], "100": [0, 35, 37], "1000": [8, 33, 35], "11": [0, 37], "11142": 37, "12": [33, 37], "1234": 10, "127": 0, "129": 37, "13": [0, 32], "14": 37, "144": 32, "1454": 33, "145416": 33, "15": [33, 35], "155103": 33, "16": [0, 33], "1637": 33, "171": 33, "18": 37, "1949": 33, "1997": 33, "199700": 33, "2": [0, 4, 25, 30, 33, 35], "20": [0, 30, 32, 33], "200": 0, "2012": [33, 37], "2013": 33, "2014": 33, "2015": 33, "2016": [33, 37], "2017": 33, "2018": 33, "2019": 33, "2020": [0, 33], "2021": 33, "2061518063427656": 33, "2062": 33, "22": [10, 35], "2370": 33, "23704031354688784": 33, "24": [29, 33], "25": [35, 37], "252": 33, "26": [32, 37], "265": 33, "26775": 37, "2859": 33, "2859066023606343": 33, "2f": 37, "3": [0, 2, 4, 14, 25, 30, 32, 33, 35], "30": 33, "300": 33, "31": [33, 37], "32": 37, "324053": 33, "3290": 37, "338": 32, "34": 32, "3600": 33, "371": 37, "39": 32, "3d": [35, 36], "3f": 33, "4": [0, 2, 17, 25, 30, 32, 33, 35, 36, 37], "40": 33, "408009": 33, "4181": 33, "479": 37, "482": 32, "4940": 33, "4f": 33, "5": [0, 2, 25, 33, 35, 37], "50": 37, "5372": 37, "5813": 37, "6": [25, 33, 35, 37], "60": 35, "6203": 33, "6241": 37, "626": 37, "6275": 37, "63": 32, "65": 37, "68": 37, "6972": 33, "7": [32, 33], "7307": 37, "7587": 33, "8": [0, 4, 25, 37], "8176": 33, "86": 14, "87": 14, "89547": 37, "9": [25, 37], "95": 37, "A": [0, 4, 10, 20, 23, 29, 35, 36, 37], "And": [2, 33, 35, 37], "As": [4, 10, 23, 27, 32, 33, 35, 36, 37], "At": [19, 20, 21, 35, 37], "But": [33, 37], "By": [2, 3, 5, 14, 30, 32, 33, 35, 37], "For": [0, 1, 2, 3, 4, 10, 13, 14, 16, 17, 19, 20, 23, 25, 26, 30, 32, 33, 35, 37], "If": [0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 13, 14, 16, 17, 19, 20, 21, 23, 24, 25, 26, 27, 29, 30, 32, 33, 35, 36, 37], "In": [0, 1, 2, 4, 10, 15, 17, 21, 23, 25, 26, 29, 30, 32, 33, 35, 36, 37], "It": [0, 1, 2, 4, 13, 15, 17, 21, 24, 25, 30, 33, 35, 37], "Its": [33, 35], "No": 37, "Not": [33, 35], "Of": 33, "On": [2, 24, 30, 32, 33, 35, 37], "Or": [2, 16, 30, 33, 37], "That": [35, 36], "The": [0, 1, 2, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 24, 26, 29, 30, 32, 33, 34, 36], "Then": [0, 2, 10, 23, 26, 33, 35, 36, 37], "There": [3, 14, 17, 25, 27, 29, 32, 35, 36, 37], "These": [1, 2, 4, 12, 17, 23, 30, 33, 35, 36, 37], "To": [0, 2, 3, 4, 5, 6, 10, 11, 12, 14, 15, 16, 17, 20, 23, 25, 26, 27, 30, 32, 33, 35, 36, 37], "With": [0, 2, 3, 8, 10, 15, 30, 32, 35], "_": 35, "__file__": 35, "__init__": [16, 35, 36], "__main__": 14, "_interv": 35, "_opt_w": 33, "_ret": 33, "aa": [4, 6, 11], "aapl": 33, "abil": [29, 35], "abl": [2, 10, 17, 19, 20, 21, 23, 24, 25, 27, 32, 33, 35, 37], "about": [1, 2, 10, 23, 24, 29, 30, 32, 33, 35, 36, 37], "abov": [0, 2, 4, 11, 19, 23, 26, 29, 30, 33, 35, 37], "absolut": [0, 5, 12, 32], "abstract": [35, 37], "access": [3, 4, 5, 6, 7, 30, 33, 35, 36], "accident": 30, "accompani": 33, "accomplish": 32, "accord": [5, 35], "accordingli": 13, "account": [29, 35, 37], "accumul": 33, "accur": 33, "achiev": [33, 35, 37], "across": [17, 32], "action": [4, 17, 33], "activ": [0, 2, 3, 4, 5, 10, 13, 23, 24, 25, 32, 33, 35], "actual": [16, 23, 27, 29, 30, 33, 35], "actual_weight": 33, "ad": [2, 3, 4, 12, 15, 16, 17, 19, 32, 35], "adapt": 35, "add": [0, 2, 3, 4, 5, 17, 19, 25, 26, 32, 33, 34, 36, 37], "add_application_toolbar": 35, "add_item_to_menu": 35, "add_item_to_toolbar": 35, "add_status_widget": 35, "addit": [0, 1, 4, 10, 14, 15, 17, 18, 32, 33, 35, 36, 37], "addition": [3, 5, 13, 17, 30, 32], "addon": 35, "address": [10, 25, 36], "addstretch": 35, "addwidget": 35, "adequ": 33, "adjust": [3, 16, 17, 35], "administr": 10, "advanc": [0, 1, 4, 6, 9, 28, 32, 37], "advantag": [20, 32, 33, 35, 37], "advertis": 35, "advis": [2, 35], "affect": [4, 10, 17, 30, 35, 37], "after": [2, 4, 7, 10, 14, 19, 23, 25, 26, 30, 32, 33, 35, 37], "afterward": [23, 33], "again": [8, 20, 23, 27, 32, 35, 37], "against": 17, "aid": [0, 25, 26, 27, 28, 35], "aim": [24, 33], "alert": 37, "algorithm": [33, 37], "align": 37, "all": [0, 2, 3, 4, 6, 8, 10, 12, 13, 14, 15, 16, 17, 19, 20, 23, 26, 30, 32, 33, 35, 37], "allow": [0, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 16, 17, 20, 21, 30, 32, 33, 35, 36, 37], "almost": [23, 33], "alon": 27, "along": [2, 3, 8, 23, 24, 29, 30], "alongsid": 20, "alpha": 37, "alphabet": [4, 12], "alreadi": [0, 2, 10, 17, 24, 25, 26, 27, 33, 35, 37], "also": [2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 20, 21, 26, 27, 29, 30, 32, 33, 35, 36, 37], "alt": [4, 35], "altern": [36, 37], "although": [0, 33, 35, 37], "alwai": [2, 3, 30, 32, 33, 37], "am": [32, 35], "amazon": 33, "among": [33, 35, 36, 37], "amount": [2, 33, 37], "amzn": 33, "an": [0, 2, 3, 4, 5, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 22, 23, 24, 25, 26, 27, 28, 30, 32, 35, 36], "anaconda": [0, 16, 19, 20, 21, 23, 25, 26, 27, 29, 30, 32, 33, 35, 37], "analys": [16, 32], "analysi": [1, 2, 7, 9, 14, 25, 32, 34, 35], "analyst": [1, 33, 37], "analyz": [9, 32, 33, 37], "ani": [0, 1, 2, 3, 4, 7, 8, 10, 11, 14, 15, 17, 19, 20, 21, 23, 25, 26, 29, 30, 32, 33, 35, 37], "annex": 35, "annual": 33, "anoth": [0, 6, 13, 23, 32, 33, 35, 37], "anova": 34, "answer": [0, 24, 37], "antiviru": 26, "anymor": 32, "anyon": [0, 1, 33, 35], "anyth": 29, "anywai": [0, 2, 29], "anywher": [16, 20, 30, 32, 35], "apach": 35, "api": [33, 35], "app": [10, 26, 36], "appdata": 23, "appear": [0, 2, 4, 13, 14, 17, 25, 27, 30, 32, 33, 35, 37], "append": 37, "appl": 33, "appli": [0, 30, 33, 35, 37], "applic": [0, 1, 2, 4, 5, 24, 26, 29, 30, 32, 33, 35, 36, 37], "applicationtoolbar": 35, "appreci": [33, 37], "approach": [0, 23, 25, 33], "appropri": [0, 2, 17, 32, 35, 37], "approxim": 33, "apt": 2, "ar": [0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 19, 23, 24, 25, 26, 29, 30, 32, 33, 35, 36, 37], "arbitrari": 17, "arch": 2, "area": [4, 13, 20, 21, 35], "aren": [0, 23, 24, 27], "argument": [4, 32, 33, 35, 37], "aris": 35, "around": [1, 4, 23, 25, 32, 33, 37], "arrai": [2, 30, 32, 33, 37], "arrang": 36, "arriv": 35, "arrow": [3, 4, 5, 11, 13, 14, 16, 32], "artifact": 35, "artifici": 33, "ascend": 33, "asid": [0, 8, 24, 35], "ask": [1, 2, 24, 37], "aspect": 37, "assembl": 33, "asset": 33, "assign": [30, 32, 33, 35], "assist": [2, 23, 24], "associ": [7, 9, 13, 15, 17, 20, 32, 35], "assum": 33, "assumpt": 37, "asterisk": 37, "astra": 33, "astro": 37, "atom": 25, "attent": 35, "attribut": [5, 12, 33, 35, 37], "auto": 29, "autocomplet": [3, 4, 27], "autoformat": 4, "automat": [0, 2, 3, 5, 6, 9, 10, 12, 14, 15, 17, 29, 30, 32, 33, 36, 37], "autopep8": 4, "av": 35, "avail": [0, 2, 3, 4, 7, 15, 16, 17, 19, 20, 21, 23, 30, 32, 33, 35, 36, 37], "averag": [19, 33, 37], "avoid": [0, 2, 3, 23, 33, 36, 37], "awar": 35, "ax": 37, "axi": [33, 37], "axvlin": 37, "azn": 33, "b": [3, 23, 30, 33, 37], "back": [3, 11, 13, 16, 26, 29, 33, 35], "backend": [3, 10, 13, 23], "background": [4, 11, 17], "backtick": 29, "backward": 33, "bad": [16, 32, 33, 37], "balanc": 33, "bar": [0, 4, 14, 16, 25, 30, 32, 33, 35, 36, 37], "bare": [23, 33], "barplot": 37, "base": [0, 1, 10, 16, 17, 32, 33, 35, 36, 37], "base_curr": 33, "baselin": 0, "basetimerstatu": 35, "bash": 21, "basi": 36, "basic": [0, 1, 2, 4, 5, 7, 15, 24, 25, 26, 27, 28, 31, 33, 34, 35], "bat": [2, 26], "batch": 26, "bdist_wheel": 35, "beauti": [1, 37], "becaus": [30, 32, 33, 35, 37], "becom": [1, 36], "been": [0, 7, 10, 19, 29, 33, 37], "befor": [0, 2, 3, 23, 24, 27, 29, 30, 32, 33, 35, 36, 37], "begin": [29, 32, 33, 35], "beginn": 24, "behav": [24, 37], "behavior": [4, 29, 33, 35, 36], "being": [0, 4, 10, 17, 19, 25, 33, 35], "bell": 37, "below": [0, 2, 4, 29, 33, 35], "benchmark": 14, "benefit": 0, "best": [0, 16, 19, 20, 21, 23, 29, 33, 35, 37], "bet": 33, "better": [0, 23, 24, 27, 33, 35, 37], "between": [4, 14, 30, 32, 33, 35, 37], "beyond": [0, 25, 30, 31, 35, 37], "bia": 37, "big": [0, 32], "biggest": 33, "bin": [2, 37], "binder": [0, 2, 33, 37], "bit": 33, "bitcoin": 33, "bjerreka": 37, "bjerrek\u00e6r": 37, "black": 4, "block": [4, 16, 23, 29, 32, 35, 36, 37], "blue": 33, "bluetooth": [35, 36], "boilerpl": 35, "book": [33, 37], "boolean": [17, 35, 37], "border": 37, "bot": 35, "both": [2, 7, 13, 14, 16, 25, 29, 30, 32, 33, 37], "bottleneck": [14, 32], "bottom": [0, 20, 21, 25, 30, 33, 37], "bought": 33, "bound": 33, "boundari": 37, "box": [0, 2, 4, 6, 10, 14, 16, 17, 30, 32, 36, 37], "bracket": 32, "break": [0, 14, 33, 35], "breakpoint": [4, 9], "brew": 2, "brief": 24, "briefli": 30, "bring": 29, "broad": [6, 33], "broadli": 37, "broken": [2, 14], "brought": 33, "brows": [4, 5, 10, 11, 14, 15, 16, 17, 30, 32, 33, 37], "browser": [0, 2, 5, 11, 32, 35], "bsd": 35, "btc": 33, "btc_hist": 33, "buffer": 21, "buffett": 33, "bug": [0, 1, 2, 4, 16, 23, 24, 26, 27, 32, 37], "build": [33, 34, 36], "built": [2, 3, 4, 5, 8, 10, 11, 17, 25, 32, 33, 35, 36, 37], "builtin": [3, 17], "bump": 35, "bundl": [0, 2], "busi": 33, "button": [0, 4, 5, 6, 9, 11, 12, 13, 14, 16, 19, 20, 21, 29, 30, 32, 33, 35, 36, 37], "c": [0, 2, 8, 10, 12, 19, 20, 21, 23, 25, 26, 33, 35, 37], "c0326": 32, "ca_item": 37, "ca_test": 37, "calc": 32, "calcul": [20, 33, 35, 37], "call": [2, 3, 10, 14, 23, 27, 28, 32, 33, 35, 37], "callabl": [14, 36], "calltip": [0, 4, 10, 25], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 23, 24, 25, 26, 27, 29, 30, 32, 33, 34, 36], "cancel": [11, 14, 16, 35], "cannot": [35, 37], "capabl": [1, 2, 10, 33, 37], "capit": [6, 35], "captur": 35, "care": [2, 23, 33], "carefulli": 26, "carlo": 24, "carpentri": 35, "case": [2, 4, 6, 11, 23, 25, 26, 29, 30, 32, 33, 35, 36, 37], "cask": 2, "cat": 37, "categor": 37, "categori": [27, 37], "catplot": 37, "caus": [23, 24, 25], "cautiou": 33, "cb": 33, "cd": [26, 35, 37], "cell": [0, 12, 17, 20, 36, 37], "center": 37, "central": 24, "certain": [6, 8, 16, 32, 37], "certainli": 23, "chanc": [2, 23, 27, 29, 37], "chang": [0, 1, 2, 3, 4, 5, 6, 9, 11, 13, 14, 17, 30, 32, 33, 36, 37], "channel": [0, 1, 2, 35], "channel_prior": 2, "charact": 17, "charg": 35, "chart": [33, 35, 36, 37], "chat": [2, 24], "chatroom": 2, "check": [0, 1, 2, 3, 4, 10, 16, 23, 24, 25, 26, 27, 29, 30, 32, 33, 37], "check_compat": 35, "checkbox": 33, "checkmark": 35, "children": 35, "choic": [4, 35, 37], "choos": [9, 15, 17, 30, 33, 35, 36, 37], "chosen": 37, "chunk": [33, 37], "circl": 35, "circular": 11, "cirillo": 35, "cla": 4, "class": [7, 12, 16, 17, 25, 32, 33, 35, 36, 37], "classic": 33, "classifi": 35, "classmethod": 4, "clean": [0, 10, 23, 27, 35, 37], "cleaner": 32, "clear": [0, 3, 4, 6, 8, 10, 13, 14, 21, 27], "clearli": 33, "click": [0, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 20, 21, 25, 26, 27, 29, 30, 32, 33, 35, 37], "clipboard": [5, 13, 20, 32, 33, 37], "clone": 35, "close": [4, 8, 20, 23, 29, 30, 33, 35, 37], "close_data_1": 33, "close_data_2": 33, "cloud": [33, 37], "cmap": 33, "cmd": [3, 4, 10, 12, 30, 33], "code": [0, 2, 3, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 19, 20, 23, 24, 25, 27, 29, 30, 31, 35, 36], "codebas": 35, "codecel": 4, "cognitive_scor": 37, "coin": 33, "coin_search": 33, "cokkiecutt": 35, "col": 37, "colab": [33, 37], "collaps": [5, 6, 14, 16, 32], "collect": 37, "color": [4, 17, 19, 33, 35, 36, 37], "color_palett": 37, "colorbar": 33, "colormap": 17, "column": [5, 14, 17, 19, 30, 32, 33, 36, 37], "com": 35, "combin": [1, 37], "come": [0, 2, 4, 23, 33, 35, 37], "comma": 16, "command": [0, 2, 3, 4, 8, 10, 15, 19, 20, 21, 23, 25, 26, 29, 30, 32, 35], "comment": [12, 16, 32], "commerci": 0, "commit": [5, 15], "common": [0, 2, 4, 5, 10, 27, 28, 32, 36], "commonli": [3, 33, 36], "commun": [0, 2, 24, 36, 37], "compani": [0, 33], "companionship": 37, "compar": [14, 32, 33, 37], "comparison": [14, 32], "compat": [0, 2, 10, 37], "compens": 33, "compil": 35, "complet": [0, 1, 3, 9, 10, 15, 28, 29, 30, 33, 35, 36, 37], "complex": [3, 30, 33, 35, 37], "compon": [9, 33, 34, 35, 37], "compos": [33, 37], "composit": 33, "comprehens": [1, 2, 33, 37], "comput": [0, 2, 5, 20, 30, 32, 33, 34, 35, 36], "concept": [33, 35], "concern": 37, "conclus": 37, "concret": 37, "conda": [0, 19, 20, 21, 23, 24, 25, 29, 30, 35], "condit": 3, "conf": 35, "conf_default": 35, "conf_sect": 35, "conf_vers": 35, "conf_widget_class": 35, "config": [2, 23, 35], "configur": [0, 2, 3, 7, 10, 14, 16, 30, 32, 34], "confirm": [0, 33, 37], "conflict": [2, 33, 37], "confpag": 35, "connect": [0, 1, 2, 7, 18, 33, 35, 36], "connect_info": 10, "consid": [33, 35], "consider": [35, 37], "consist": [4, 26, 29, 33, 35, 36, 37], "consol": [0, 3, 4, 7, 8, 9, 13, 14, 17, 18, 21, 23, 25, 29, 30, 32, 35], "consolid": 35, "constant": [12, 33, 35], "constitut": 37, "constraint": 33, "construct": [33, 37], "constructor": [4, 35], "consult": [2, 4, 24, 27, 33], "contact": 35, "contain": [0, 16, 24, 29, 32, 33, 36, 37], "container_class": 35, "content": [3, 4, 5, 6, 10, 11, 17, 19, 26, 30, 32, 35], "context": [4, 5, 8, 15, 17, 20, 33, 37], "continu": [25, 30, 32], "contract": 17, "contrast": 33, "contribut": [2, 35, 37], "control": [2, 3, 4, 9, 21, 25, 32, 34, 36], "conveni": [10, 33, 35, 37], "convent": [4, 37], "convert": 35, "cookbook": 10, "cookicutt": 35, "cookiecutt": 35, "cool": 33, "copi": [0, 2, 5, 8, 10, 13, 16, 17, 20, 21, 23, 26, 29, 30, 32, 33, 35, 37], "cordoba": 24, "core": [0, 4, 24, 30, 32, 35, 36], "corner": [7, 21, 33, 35, 37], "corr": 33, "correct": [1, 32, 33, 37], "correctli": [0, 37], "correl": [33, 37], "correspond": [4, 5, 10, 11, 12, 16, 25, 32, 33, 35, 36, 37], "could": [33, 35, 36, 37], "couldn": 27, "count": [4, 14, 35, 37], "countdown": 35, "counter": 35, "coupl": [23, 32, 33], "cours": [23, 33, 37], "cov": 33, "covari": 33, "cover": 1, "coverag": 35, "cpr": [27, 28], "cpu": 0, "crash": 27, "creat": [0, 2, 4, 5, 9, 10, 12, 13, 17, 20, 21, 23, 25, 26, 33, 34, 36, 37], "create_act": 35, "create_menu": 35, "create_spinbox": 35, "create_toolbutton": 35, "creation": 35, "criteria": 17, "critic": [14, 37], "crowdin": 1, "crucial": 37, "crypto": 33, "crypto_hist": 33, "crypto_list": 33, "csv": [32, 33, 37], "ctrl": [3, 4, 7, 10, 11, 12, 30, 33, 35], "cumprod": 33, "currenc": 33, "current": [0, 1, 2, 3, 4, 8, 10, 12, 13, 14, 15, 17, 21, 25, 26, 32, 33, 35, 37], "current_year": 33, "cursor": [0, 4, 12, 21, 32], "curv": 37, "custom": [2, 3, 4, 5, 12, 13, 16, 21, 23, 31, 32, 36], "customiz": 16, "cycl": [13, 35], "cython": [2, 10, 25, 33, 37], "d": [11, 14, 15, 16, 32, 37], "d_": 37, "d_age": 37, "d_religion_serios": 37, "daemon": 10, "dai": [24, 33], "dark": 30, "dash": 37, "data": [1, 2, 4, 10, 14, 17, 28, 32, 34, 35, 36], "data_1": 33, "data_2": 33, "datafram": [2, 4, 33, 37], "dataset": 34, "datatyp": 17, "date": [0, 1, 2, 5, 8, 23, 25, 32, 33, 37], "datetim": 32, "deactiv": [3, 13, 17], "deadlin": 35, "deal": 33, "deb": 2, "debug": [1, 4, 9, 26, 28, 37], "debugg": [9, 10, 17, 20], "decad": 33, "decim": [17, 33], "declar": [4, 35], "declin": 33, "decor": [4, 19, 35], "decreas": [33, 35], "dedic": [0, 2, 4, 33, 35, 37], "deep": [0, 1, 37], "deeper": 17, "def": [33, 35], "default": [0, 2, 3, 4, 5, 7, 8, 10, 13, 14, 16, 23, 25, 30, 32, 33], "defin": [3, 4, 6, 30, 32, 33, 35, 37], "definit": [4, 12, 35], "degre": 37, "delet": [5, 8, 23, 30, 33, 35, 37], "delimit": 33, "delta": 14, "demo": 30, "demograph": 37, "demonstr": 30, "denomin": 33, "denot": 36, "densiti": 37, "depend": [0, 2, 23, 29, 33, 35, 37], "deprec": 10, "depth": [1, 35], "deriv": 35, "describ": [0, 2, 4, 25, 26, 29, 33, 37], "descript": [1, 2, 4, 16, 27, 29, 33, 35, 37], "deserv": 35, "design": [1, 33, 35, 36, 37], "desir": [4, 10, 16, 17, 33, 35, 37], "desktop": [35, 36], "despit": 33, "detail": [0, 1, 2, 10, 16, 23, 27, 29, 33, 35, 36], "detect": [16, 32, 37], "determin": [4, 14, 32], "detract": 37, "dev": [0, 2, 35], "dev0": 35, "develop": [0, 1, 24, 30, 33, 34, 36, 37], "deviat": [4, 37], "df": 37, "dfd": 37, "dfn": 37, "diagnos": [23, 29], "diagram": 37, "dialog": [0, 2, 4, 10, 14, 16, 17, 25, 26, 27, 29, 30, 35], "dictionari": [33, 35], "did": [29, 33, 35, 37], "diff": [14, 32, 35], "differ": [1, 3, 4, 5, 17, 23, 26, 30, 32, 33, 35, 36, 37], "differenti": 37, "difficult": [29, 37], "difficulti": [2, 29], "dimens": 17, "dimension": 17, "diminish": 33, "dir": 10, "direct": [2, 16, 35], "directli": [5, 7, 10, 11, 16, 17, 24, 26, 29, 30, 32, 33, 37], "directori": [3, 4, 5, 6, 8, 10, 15, 16, 21, 23, 25, 26, 30, 32, 33, 35], "disabl": [4, 7, 12, 13, 16, 26, 32, 35], "disappear": 26, "discard": 37, "discourag": 10, "discov": [30, 32, 37], "discuss": [2, 24, 33], "disk": [2, 14, 26, 33], "dismiss": 36, "dispers": 37, "displai": [0, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 17, 19, 20, 25, 29, 32, 33, 35, 36, 37], "display_tim": 35, "disproven": 37, "disrupt": 10, "dist": 35, "distinct": [4, 33], "distinguish": 37, "distribut": [0, 5, 15, 23, 24, 27, 33, 35], "distro": [0, 2], "divid": [4, 30, 33], "do": [0, 2, 3, 8, 20, 23, 24, 25, 26, 29, 30, 32, 33, 34, 36], "doabl": 23, "doc": [4, 11, 22, 23, 24, 32, 35], "dock": [2, 35], "dockabl": [35, 36], "docstr": [0, 7], "document": [2, 4, 7, 10, 11, 13, 16, 25, 30, 32, 33, 35, 36, 37], "doe": [0, 2, 16, 26, 29, 33, 35, 37], "doesn": [0, 1, 4, 16, 23, 25, 26, 32, 33], "dog": 37, "dog_or_cat": 37, "dog_or_cat_col_nam": 37, "dog_or_cat_pivot": 37, "dog_or_cat_sampl": 37, "doi": 37, "dollar": 33, "don": [0, 1, 17, 20, 23, 25, 30, 32, 33, 35, 37], "done": [23, 33, 35, 37], "dot": [33, 37], "doubl": [2, 4, 5, 10, 14, 17, 26, 29, 30, 32, 33, 37], "doubt": [35, 37], "down": [3, 4, 11, 14, 23, 30, 32, 33], "download": [0, 30, 32, 35], "downward": 37, "dpi": 33, "drag": [2, 4, 30], "draw": [33, 37], "drawn": 33, "drive": 0, "drop": [4, 11, 30, 33, 37], "dropdown": [0, 4, 6, 14, 16, 30, 32, 33, 37], "dropna": [33, 37], "dtype": [33, 37], "dual": 0, "due": [2, 23, 25, 33, 35, 37], "duplic": [17, 29, 36], "durat": 35, "dure": [13, 33, 35], "dynam": [7, 11, 25], "e": [0, 2, 3, 4, 10, 14, 21, 23, 26, 29, 33, 35, 37], "each": [0, 1, 3, 4, 5, 6, 8, 10, 12, 14, 17, 20, 30, 32, 33, 35, 36, 37], "earli": 33, "earlier": [2, 35, 37], "earn": 33, "eas": [32, 35], "easi": [1, 2, 4, 8, 25, 33, 37], "easier": [4, 33, 35, 37], "easiest": [0, 1, 30], "easili": [2, 3, 4, 6, 7, 10, 14, 15, 16, 17, 25, 30, 32, 33, 35, 37], "econometr": 33, "ecosystem": 2, "edit": [1, 2, 3, 9, 16, 17, 20, 30, 32, 33, 35, 36, 37], "editor": [0, 3, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 20, 21, 25, 30, 32], "effect": [0, 2, 33], "effici": [4, 32], "effort": 35, "either": [0, 1, 4, 10, 17, 19, 23, 25, 26, 29, 33, 35, 36], "elaps": 10, "element": [4, 12, 14, 17, 30, 33, 35, 36, 37], "elementari": 33, "elimin": 33, "els": [14, 26, 27, 29], "elsewher": [23, 29, 32], "email": 35, "embed": 36, "emerg": [27, 28, 37], "emit": 36, "empir": 37, "emploi": 37, "employe": 0, "empti": [4, 37], "enabl": [2, 3, 4, 6, 7, 10, 13, 14, 26, 32, 33, 35, 37], "encapsul": 35, "encount": [2, 25], "encourag": [1, 33], "end": [0, 16, 32, 33, 35, 37], "end_i": 33, "end_year": 33, "endpoint": 35, "engin": [1, 33, 37], "enhanc": [0, 1, 3, 10, 23, 34], "enjoi": 30, "enorm": 16, "enough": 33, "ensur": [2, 33], "enter": [0, 3, 4, 6, 7, 8, 10, 11, 14, 15, 16, 17, 20, 26, 29, 30, 32, 33, 35, 37], "entertain": 33, "entir": [4, 15, 17, 30, 32, 33, 37], "entri": [2, 4, 12, 15, 16, 30, 32, 35], "entry_point": 35, "env": [0, 2, 23, 37], "environ": [0, 1, 10, 11, 17, 23, 24, 25, 27, 29, 32, 34], "eq": 33, "equal": [33, 37], "equival": 0, "eras": 6, "error": [0, 2, 4, 14, 16, 23, 26, 27, 28, 29, 32, 36, 37], "especi": [22, 24, 25, 33, 35, 37], "essenc": [33, 37], "essenti": 33, "establish": 37, "estim": [33, 37], "etc": [0, 2, 4, 15, 17, 33], "etc_hist": 33, "etern": 37, "eth": 33, "ethereum": 33, "evalu": 32, "even": [17, 23, 24, 33, 35, 37], "event": 3, "eventu": 35, "ever": 30, "everi": [3, 4, 12, 14, 23, 24, 32, 35, 36], "everyon": [1, 27, 30, 32], "everyth": [0, 2, 23, 29, 30, 32, 33, 35, 37], "evid": 37, "exact": 14, "exactli": [3, 29], "examin": [29, 37], "exampl": [0, 3, 4, 13, 14, 16, 17, 30, 32, 33, 35, 37], "exceed": 33, "excel": [33, 37], "except": [2, 26, 33, 37], "exchang": 35, "exclam": 3, "exclud": 6, "execut": [0, 1, 3, 4, 8, 10, 14, 16, 17, 19, 20, 25, 26, 30, 32, 33, 35, 37], "exercis": 35, "exist": [0, 2, 4, 10, 15, 16, 17, 23, 27, 32, 33, 35, 37], "exit": 0, "exp_real_ret": 33, "expand": [5, 6, 10, 12, 14, 16, 17, 32], "expect": [23, 29, 35, 37], "expected_pr": 33, "experi": [1, 4, 33, 35, 37], "experienc": [2, 24, 27, 29], "experiment": 2, "expert": [2, 23, 24], "explain": [29, 35, 37], "explan": 37, "explor": [1, 2, 3, 4, 9, 10, 11, 13, 15, 20, 23, 26, 27, 30, 32, 34, 35], "export": [0, 13, 37], "expos": 35, "express": [4, 6, 10, 32, 37], "extend": [35, 36], "extended_output": 33, "extens": [5, 6, 14, 20, 32, 35, 36], "extent": [33, 37], "extern": [0, 2, 4, 5, 9, 32], "extra": 35, "extract": [33, 37], "f": [0, 4, 11, 12, 32, 33, 35, 37], "f10": [14, 32], "f12": 3, "f2": 4, "f3": 4, "f5": 4, "f6": 4, "f8": [16, 32], "f9": [4, 33, 37], "f_critic": 37, "f_onewai": 37, "f_valu": 37, "fa": 35, "face": 2, "facilit": 35, "fact": [33, 35, 37], "factori": 0, "fail": [14, 16, 26], "fairli": [25, 37], "fals": [33, 35, 37], "famili": 33, "familiar": [1, 3, 22, 27, 30, 32, 33, 37], "faq": 2, "far": 37, "fast": [3, 37], "faster": [2, 32, 35, 37], "fastest": 33, "favor": 33, "favorit": [33, 35], "featur": [0, 1, 2, 6, 7, 9, 13, 17, 20, 23, 24, 30, 32, 33, 36, 37], "fedora": 2, "feel": [35, 37], "few": [2, 25, 35, 37], "ffill": 33, "field": [0, 6, 10, 11, 14, 16, 32, 35, 37], "fifth": 35, "fig": [33, 37], "fig_dim": 37, "figsiz": [33, 37], "figur": [3, 4, 13, 27, 30, 32, 33, 37], "file": [0, 2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 23, 25, 26, 30, 32, 33, 35, 36], "filenam": [5, 6, 14, 16, 32], "filesystem": 5, "fill": [10, 29, 36], "filter": [5, 6, 17, 37], "final": [0, 2, 3, 4, 6, 10, 13, 14, 16, 17, 20, 22, 25, 27, 30, 32, 34], "financ": 33, "financi": [34, 35, 37], "find": [0, 5, 7, 9, 11, 16, 17, 22, 23, 24, 26, 29, 30, 32, 33, 35, 37], "find_crypto_pair": 33, "finish": [35, 37], "firewal": 26, "first": [0, 1, 2, 10, 14, 17, 25, 26, 28, 29, 31, 32, 34, 37], "fit": [32, 33, 36, 37], "fivethirtyeight": 33, "fix": [0, 1, 2, 23, 25, 26, 27, 29, 32, 35, 37], "fixm": 16, "flag": 4, "float": [33, 35, 37], "float64": 33, "flow": 3, "fluctuat": 33, "fly": 4, "focu": 35, "focus": [0, 10], "folder": [0, 2, 5, 8, 10, 15, 16, 23, 25, 32, 35], "follow": [0, 1, 2, 4, 12, 19, 20, 21, 23, 25, 26, 27, 29, 30, 33, 35, 36, 37], "followup": 14, "font": [4, 11, 30, 33, 35, 36], "forecast": 33, "forg": [0, 2, 19, 20, 21, 23, 33, 35], "forget": 33, "form": [29, 36], "formal": [33, 35], "format": [5, 7, 13, 17, 29, 32, 33, 35], "formatt": 33, "former": 24, "forti": 17, "fortun": [35, 37], "forum": 23, "forward": [11, 13], "found": [0, 6, 23, 33, 35, 37], "four": [30, 32, 35, 37], "fourth": 35, "fpalm": 35, "fragment": 4, "framework": [35, 36], "francesco": 35, "francisco": 35, "free": [0, 1, 24, 35], "freedom": 37, "freeli": [0, 30], "frequenc": [33, 37], "frequent": [1, 25, 33, 37], "fresh": [2, 10, 23], "friendli": 35, "from": [0, 3, 4, 5, 6, 7, 8, 10, 11, 13, 15, 16, 17, 19, 20, 23, 24, 26, 28, 29, 30, 32, 33, 35, 36], "from_dict": 33, "front": 36, "full": [0, 2, 4, 7, 8, 10, 12, 16, 23, 24, 29, 33, 35, 37], "full_nam": 35, "fulli": [0, 2, 3, 17, 29], "fun": [33, 37], "function": [0, 1, 2, 3, 5, 7, 9, 10, 12, 14, 15, 19, 22, 25, 30, 32, 35, 36, 37], "fundament": [34, 35], "further": [2, 23, 26, 30, 32, 34, 36], "furthermor": [3, 17], "futur": [2, 6, 19, 20, 21, 26, 30], "g": [0, 2, 3, 4, 10, 21, 23, 26, 29, 33, 35, 37], "gadget": 36, "gain": 33, "gather": 37, "gb": 0, "gear": 0, "gender": 37, "gener": [0, 2, 3, 4, 11, 13, 16, 17, 24, 25, 27, 29, 30, 32, 35, 36, 37], "gentoo": 2, "get": [0, 1, 2, 9, 10, 11, 22, 23, 24, 25, 26, 27, 29, 31, 32, 33, 34, 37], "get_conf": 35, "get_contain": 35, "get_descript": 35, "get_icon": 35, "get_nam": 35, "get_path": 26, "get_plugin": 35, "get_tooltip": 35, "get_transl": 35, "get_valu": 35, "git": [5, 14, 15, 35], "github": [1, 2, 23, 27, 29, 35], "github_org": 35, "github_usernam": 35, "gitk": 15, "gitter": 2, "give": [4, 5, 16, 17, 27, 33, 35, 36, 37], "given": [0, 2, 3, 5, 14, 15, 25, 33, 35], "glass": 11, "global": [3, 16, 17, 32], "gmail": 35, "gnu": [2, 8, 35], "go": [0, 3, 10, 12, 14, 16, 20, 21, 24, 25, 26, 28, 30, 32, 33, 35, 37], "goal": 34, "gone": 32, "good": [23, 26, 27, 29, 33, 35, 37], "goog": 33, "googl": [2, 29, 33, 37], "got": 24, "gp": [35, 36], "graham": 33, "graph": [33, 36, 37], "graphic": [2, 3, 10, 13, 33, 35, 36, 37], "great": [2, 24, 37], "greater": 37, "green": [30, 32, 35, 37], "grew": 33, "grid": 17, "gross": 33, "group": [2, 12, 33, 36, 37], "group_bi": 33, "groupbi": 37, "grow": 33, "growth": 33, "guarante": 17, "gui": [3, 10, 17, 23, 35, 36], "guid": [0, 1, 7, 22, 23, 24, 29, 30, 33, 35, 37], "guidelin": [23, 33, 35], "guru99": 35, "gz": 35, "h": 32, "ha": [0, 3, 4, 7, 10, 15, 17, 24, 27, 29, 32, 33, 35, 36, 37], "had": 33, "hamburg": [4, 7, 8, 35], "hand": [33, 37], "handi": 4, "handl": [23, 35, 37], "handler": 36, "happen": [17, 29, 33, 36, 37], "happi": [30, 32], "harpercollin": 33, "hasn": 29, "have": [0, 1, 2, 3, 4, 7, 10, 11, 15, 16, 17, 19, 20, 21, 24, 25, 26, 29, 30, 32, 33, 35, 36, 37], "header": 17, "heart": 30, "heat": 17, "heatmap": 17, "heavi": 33, "heavyweight": 33, "height": 37, "hello": [30, 32, 35], "help": [0, 4, 9, 10, 23, 26, 27, 28, 29, 30, 32, 33, 35], "helper": 35, "her": 37, "here": [0, 2, 7, 22, 28, 29, 30, 32, 33, 35, 37], "hesit": 35, "hi": 37, "hidden": [5, 35], "hide": [4, 5, 12, 17, 20, 30, 32], "hierarch": [5, 14, 32], "high": [0, 33, 35], "higher": [33, 37], "highest": [33, 37], "highlight": [0, 3, 6, 8, 12, 16, 23, 30, 32, 35], "hilpisch": 33, "hint": [0, 25], "hist": [33, 37], "histogram": [17, 37], "histori": [3, 9, 10, 16, 30, 33, 35], "historic_crypto": 33, "historicaldata": 33, "histplot": 37, "hit": [19, 33, 37], "hold": [33, 35], "home": [0, 2, 8, 10, 11, 23, 24, 25, 35], "homebrew": 2, "hope": [30, 33, 35, 37], "hopefulli": [26, 27], "horizont": [4, 30, 37], "host": 10, "hostnam": 10, "hour": 29, "hous": 11, "hover": [0, 4, 9, 25], "how": [0, 1, 2, 3, 4, 5, 10, 12, 13, 19, 23, 24, 27, 29, 30, 32, 33, 34, 36], "howev": [0, 2, 5, 25, 30, 33, 35, 37], "html": [35, 37], "http": [33, 35, 37], "hub": 24, "huge": 23, "human": 35, "hurri": 35, "husl": 37, "hyperlink": 32, "hypothesi": 34, "i": [0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 23, 24, 25, 26, 27, 29, 30, 32, 35, 36, 37], "icon": [4, 7, 8, 9, 11, 13, 30, 32, 35], "icon_manag": 35, "id": [2, 4, 10, 22, 23, 24, 25, 35, 37], "id_rsa": 10, "idea": [29, 35, 36], "ideal": [17, 33, 37], "ident": [0, 6, 14, 23], "identif": 37, "identifi": [14, 32, 35, 37], "idl": 0, "ignor": [3, 37], "ill": [0, 27, 28], "iloc": [33, 37], "ima": 35, "imag": [2, 4, 13, 17, 33, 37], "immedi": [2, 20, 26, 37], "implement": [24, 25, 33, 35, 36, 37], "impli": 37, "implicitli": 30, "import": [0, 2, 3, 9, 10, 15, 22, 25, 26, 32, 33, 35, 37], "impos": 15, "imposs": 23, "improv": [0, 4, 17, 31, 37], "includ": [0, 1, 2, 3, 4, 5, 7, 10, 11, 12, 17, 24, 25, 28, 30, 32, 35, 37], "incompat": [0, 2], "incomplet": 25, "inconceiv": 35, "inconsist": 37, "incorpor": 35, "increas": [14, 32, 33, 35], "inde": [27, 37], "indent": 29, "independ": [2, 35], "index": [11, 17, 32, 33], "indic": [14, 17, 30, 32, 33, 35, 36, 37], "indistinctli": 37, "individu": [2, 7, 14, 16, 19, 23, 27, 35, 37], "industri": 33, "influenc": 37, "info": [2, 20, 23, 33, 35], "inform": [0, 2, 10, 14, 17, 20, 23, 24, 26, 29, 30, 32, 35, 36, 37], "infrastructur": 0, "inher": 17, "initi": [33, 35, 36, 37], "inlin": [0, 3, 7, 10, 32], "inner": [17, 23, 35], "inplac": [33, 37], "input": [20, 35, 36, 37], "insert": [0, 17, 29, 35, 37], "insid": [0, 4, 5, 10, 11, 14, 15, 20, 21, 26, 32, 33, 35, 36], "insight": 33, "inspect": [0, 1, 7, 10, 17, 33, 35, 37], "inspector": 17, "instal": [1, 3, 10, 11, 14, 18, 23, 24, 26, 27, 29, 30, 32, 33, 35, 37], "instanc": [10, 17, 23, 25, 26, 35, 36], "instanti": 35, "instantpopup": 35, "instead": [0, 2, 5, 12, 17, 23, 26, 27, 32, 33, 35, 37], "instruct": [0, 2, 23, 33, 35, 37], "instrument": 33, "insuffici": 7, "int": [30, 35, 37], "int64": 37, "integ": 37, "integr": [2, 3, 4, 10, 15, 21, 33, 35, 37], "intel": 2, "intellig": [16, 33, 37], "intend": [33, 37], "intens": 0, "interact": [1, 3, 4, 10, 13, 17, 20, 21, 22, 23, 30, 32, 33, 35, 36, 37], "interchang": 17, "interconnect": 36, "interest": [33, 35, 37], "interfac": [1, 8, 9, 20, 22, 30, 35, 36], "interfer": 26, "intermedi": 33, "intern": [0, 7, 23, 29, 35], "internal_valu": 32, "interpret": [0, 3, 7, 9, 10, 21, 23, 25, 26, 29, 32, 33, 37], "interquartil": 37, "interrupt": [7, 10], "interv": [35, 37], "intro": 34, "introduc": 35, "introduct": [30, 35], "introspect": 25, "invalid": [16, 32], "invest": 33, "investig": 37, "investor": 33, "invis": [5, 8], "invok": 37, "involv": [1, 2, 23, 25, 29, 33, 35, 37], "ip": [0, 10], "ipdb": 9, "ipykernel": [23, 25], "ipynb": 20, "ipython": [0, 3, 4, 7, 8, 9, 13, 14, 17, 18, 21, 23, 24, 25, 27, 29, 30, 32], "ipython_genutil": 0, "is_dark_font_color": 32, "isc": 35, "isn": [2, 23, 25, 26, 32], "isol": [2, 28], "issu": [0, 1, 2, 4, 16, 21, 23, 24, 26, 27, 28, 32, 33, 37], "item": [0, 1, 4, 9, 12, 14, 17, 19, 20, 21, 23, 25, 29, 32], "iterrow": 37, "its": [0, 1, 2, 4, 5, 7, 10, 11, 12, 14, 16, 17, 23, 24, 25, 26, 29, 30, 32, 33, 35, 36, 37], "itself": [0, 2, 10, 14, 17, 23, 24, 26, 33, 35, 36], "j": [33, 37], "jame": 33, "jnj": 33, "job": 35, "john": 35, "johnson": 33, "join": 33, "json": [0, 10, 37], "juanita": [30, 32], "jump": [4, 12], "jupyt": [4, 10, 20, 23, 35, 37], "jupyter_cli": [23, 25], "jupyter_cor": [23, 25], "just": [0, 2, 3, 8, 11, 12, 15, 16, 17, 21, 23, 26, 27, 30, 32, 33, 35, 37], "k": 37, "kde": 37, "keep": [23, 32, 33, 35, 37], "kei": [7, 9, 14, 17, 22, 25, 29, 30, 33, 35], "kera": 37, "kernal": 10, "kernel": [0, 9, 23, 27, 28, 33, 35, 37], "keyboard": [3, 9, 10, 23, 35], "keyerror": 37, "keyfil": 10, "keyword": [4, 11, 32], "kind": [32, 33, 35, 37], "kirkegaard": 37, "kitti": 37, "know": [23, 32, 33, 35, 37], "knowledg": [33, 35, 37], "known": [2, 26, 36], "kurtosi": 37, "l": [0, 3, 4, 30], "la": 0, "label": [0, 35], "lack": 2, "lambda": [33, 37], "languag": [0, 1, 2, 4, 10, 23, 24, 25, 33, 35, 37], "larg": [0, 17, 24, 32, 33, 37], "larger": [32, 33, 37], "largest": 33, "last": [4, 8, 15, 23, 25, 26, 27, 33, 37], "later": [17, 30, 37], "latest": [0, 2, 23, 25], "latter": [7, 24], "laugh": 37, "launch": [0, 2, 5, 10, 23, 25, 26, 27, 29, 30, 32, 37], "launchpad": 2, "layer": 35, "layout": [30, 35], "lead": [2, 24, 29], "learn": [0, 1, 2, 14, 24, 31, 32, 34], "learner": 34, "learnpython": 24, "least": [0, 24, 26], "leav": [33, 37], "left": [2, 3, 4, 6, 7, 8, 11, 14, 21, 26, 30, 33, 35, 37], "legaci": [10, 35], "len": [33, 37], "length": 33, "leptokurt": 37, "less": [29, 33, 35, 37], "lesser": 33, "let": [4, 30, 32, 33, 34, 37], "letter": [0, 33, 36], "level": [1, 4, 12, 14, 16, 17, 32, 33, 35, 37], "leverag": 33, "li": [23, 27], "librari": [2, 3, 11, 25, 30, 32, 33, 35, 36, 37], "libreoffic": 32, "licens": [0, 35], "lie": 25, "life": 35, "light": 30, "lighter": 2, "like": [0, 2, 3, 4, 5, 8, 11, 14, 15, 16, 17, 23, 25, 27, 29, 30, 32, 33, 35, 37], "limit": [4, 21, 25, 35, 37], "limits_group": 35, "line": [0, 2, 3, 6, 8, 14, 16, 18, 23, 25, 26, 27, 29, 30, 32, 33, 35, 36, 37], "linear": 33, "linestyl": 37, "linewidth": 37, "linger": 23, "link": [2, 11, 24, 33, 35], "linux": [0, 8, 16, 23, 25, 35, 37], "list": [0, 3, 4, 5, 6, 8, 10, 11, 12, 13, 14, 16, 20, 23, 24, 25, 27, 29, 30, 32, 33, 35, 37], "listen": 10, "lite": 2, "litecoin": 33, "littl": 37, "ll": [2, 22, 25, 26, 29, 30, 32, 35], "load": [7, 10, 11, 14, 17, 25, 32, 33, 35, 37], "loc": 33, "local": [3, 11, 14, 17, 20, 32, 33, 35, 37], "locat": [0, 4, 6, 11, 12, 15, 29, 35], "lock": [7, 30], "log": [33, 35], "logarithm": 33, "logger": 35, "long": [0, 8, 10, 16, 25, 33, 35, 36, 37], "long_descript": 35, "long_description_content_typ": 35, "longer": [17, 32, 35], "longest": 32, "look": [2, 10, 11, 16, 20, 23, 24, 27, 29, 30, 32, 33, 35, 37], "loop": [33, 36], "loss": 33, "lost": [33, 37], "lot": 33, "lousi": 33, "lovabl": 37, "lover": 37, "low": 33, "lower": [23, 32, 33, 37], "lowercas": 33, "lowest": [33, 37], "lsp": [0, 4, 35], "ltc": 33, "ltc_hist": 33, "lxml": 33, "m": [0, 2, 10, 12, 14, 19, 30, 32, 33], "m1": 2, "ma": 33, "mac": 23, "machin": [0, 10, 17, 23, 32, 33, 35, 37], "maco": [0, 3, 8, 10, 16, 19, 20, 21, 23, 25, 30, 33, 35, 37], "macport": [0, 2, 29], "made": [4, 35, 37], "magic": 3, "magnifi": 11, "mai": [0, 2, 23, 25, 26, 32, 33, 35], "main": [0, 2, 17, 30, 31, 35, 36], "main_contain": 35, "main_fg_color": 35, "main_sect": 35, "mainli": [33, 37], "maintain": [0, 24, 35], "mainwindow": [26, 32, 36], "major": [2, 23, 35], "make": [0, 2, 4, 5, 8, 11, 15, 20, 21, 23, 25, 26, 27, 29, 32, 33, 35, 37], "makefil": 35, "malici": 17, "mamba": [2, 35], "mambaforg": 2, "manag": [0, 1, 2, 5, 10, 17, 23, 24, 32, 33, 35, 37], "mandatori": 35, "mani": [0, 2, 4, 5, 10, 19, 23, 24, 27, 30, 33, 36, 37], "manipul": [33, 35, 37], "manual": [0, 2, 4, 7, 13, 14, 16, 17, 25, 26, 29, 32, 33, 35, 37], "map": [0, 17, 35], "map0logo": 35, "mapologo": 35, "mark": [8, 17, 35, 37], "markdown": 35, "market": 33, "master": 33, "match": [4, 5, 6, 11, 13, 17, 30, 32, 37], "math": [10, 30, 33], "mathemat": 33, "matlab": 4, "matplotlib": [0, 2, 9, 10, 17, 24, 30, 32, 33, 37], "matpotlib": 2, "matrix": 36, "matter": [33, 37], "matur": 37, "max": [17, 33, 37], "max_": 35, "max_ag": 37, "max_ylim": 37, "maxim": [29, 33], "maximum": [6, 33, 37], "md": 35, "mdi": 35, "mean": [0, 1, 2, 23, 25, 26, 32, 35, 36, 37], "meanwhil": 14, "measur": [14, 32, 33, 35, 37], "median": 37, "meet": 35, "memori": [0, 2, 14, 33, 37], "mention": [0, 22, 25, 35, 36], "menu": [0, 2, 3, 4, 6, 7, 9, 11, 14, 15, 19, 20, 21, 23, 25, 29, 30, 32, 35, 37], "mere": 37, "merg": 33, "messag": [0, 2, 10, 16, 23, 25, 27, 29, 32, 35, 36], "message_nam": 16, "met": 37, "meta": 2, "metapackag": 2, "method": [0, 4, 7, 12, 14, 23, 25, 26, 27, 32, 33, 35, 36], "microsoft": 33, "might": [0, 2, 8, 16, 23, 24, 25, 29, 32, 37], "mile": 37, "millisecond": [19, 35], "min": [17, 33, 35, 37], "min_": 35, "min_ag": 37, "min_ylim": 37, "mind": [35, 37], "miniconda": [0, 2, 33, 35, 37], "miniforg": [0, 2], "minim": [0, 2, 33, 35, 37], "minimum": [33, 35, 37], "minor": [23, 35], "mint": 2, "minut": 35, "miss": [2, 29, 35, 37], "misunderstand": 24, "mit": 35, "mix": 2, "mixin": 35, "mkdir": 37, "mkvirtualenv": 2, "modal": 36, "mode": [3, 4, 9, 35], "model": [0, 33, 37], "modern": 0, "modest": [2, 33, 37], "modifi": [0, 4, 5, 10, 17, 20, 30, 35, 37], "modul": [3, 7, 9, 11, 15, 16, 25, 32, 35], "moment": [19, 20, 21, 35], "monei": 33, "monitor": 30, "month": [23, 33], "monthly_data_1": 33, "monthly_data_2": 33, "more": [0, 1, 2, 4, 10, 12, 14, 16, 17, 19, 21, 23, 24, 25, 29, 30, 32, 33, 35, 36, 37], "most": [0, 2, 4, 14, 22, 23, 25, 26, 27, 30, 32, 33, 35, 36, 37], "mostli": 35, "mous": 33, "move": [5, 11, 30, 32, 33, 35, 37], "movement": 33, "mpl": 33, "msft": 33, "much": [0, 2, 4, 17, 23, 29, 32, 33, 35, 37], "multi": [4, 17], "multiindex": 17, "multilin": 3, "multipl": [4, 5, 12, 37], "multiplatform": [35, 36], "multipli": 33, "multitask": 33, "must": [0, 10, 15, 19, 33, 35, 37], "mute": [10, 32], "mvp": 33, "my": 0, "n": [0, 2, 23, 33, 35, 37], "name": [0, 2, 3, 4, 5, 7, 10, 11, 12, 14, 15, 16, 17, 20, 25, 30, 32, 33, 35, 36, 37], "namespac": [4, 10, 17], "narrow": 23, "nativ": [13, 35, 36], "natur": [33, 37], "navig": [0, 2, 6, 8, 9, 11, 12, 23, 26, 30, 32, 33, 35, 36], "neat": 37, "necessari": [10, 30, 32, 35], "need": [0, 1, 2, 4, 6, 8, 10, 25, 26, 29, 33, 35, 36, 37], "neg": [33, 37], "neither": 37, "neovim": 4, "nest": 12, "netflix": 33, "netflix_info": 33, "network": [0, 35, 36], "never": 30, "new": [0, 1, 2, 3, 4, 10, 13, 15, 17, 20, 21, 23, 24, 25, 27, 30, 32, 33, 35, 37], "newer": [2, 24], "newest": 10, "newli": [35, 37], "next": [2, 4, 10, 19, 21, 25, 30, 32, 33, 35, 37], "nflx": 33, "non": [0, 8, 32, 33, 35, 36], "none": [4, 13, 23, 25, 26, 35], "nor": 37, "norm": 33, "normal": [3, 8, 33, 37], "notabl": 33, "notat": 37, "note": [0, 10, 30, 32, 33, 35, 37], "notebook": [0, 4, 10, 18, 24, 25, 37], "noth": [0, 14, 25, 37], "notic": [32, 33, 35, 37], "notif": [35, 36], "notifi": 36, "now": [0, 2, 19, 30, 32, 33, 35, 37], "nowadai": 33, "np": 33, "npy": 17, "null": 37, "num_group": 37, "num_observ": 37, "number": [2, 3, 4, 5, 6, 8, 10, 14, 16, 17, 19, 24, 25, 32, 33, 35, 37], "numer": [2, 17, 37], "numfocu": 0, "numpi": [2, 10, 24, 30, 32, 33, 37], "o": [0, 12, 26, 29, 33, 37], "object": [0, 4, 7, 9, 10, 11, 14, 30, 32, 33, 37], "observ": [26, 29, 33, 37], "obtain": [2, 19, 30, 34, 37], "obviou": 35, "occasion": [25, 26], "occupi": [33, 37], "occur": [0, 14, 25, 27, 29, 37], "occurr": [6, 8, 32], "odp": 37, "off": [7, 10, 13, 16, 32], "offer": [2, 3, 4, 5, 13, 17, 23, 24, 32, 33, 35, 36, 37], "offici": [33, 35, 37], "offset": 33, "often": [2, 10, 23, 27, 29, 30, 37], "ok": [2, 4, 10], "okai": 35, "okcupid": 37, "old": [2, 37], "older": [2, 30, 37], "on_clos": 35, "on_conf_chang": 35, "on_initi": 35, "on_plugin_avail": 35, "on_preferences_avail": 35, "on_statusbar_avail": 35, "on_toolbar_avail": 35, "onc": [0, 4, 5, 10, 15, 25, 26, 29, 30, 32, 33, 35], "one": [0, 1, 2, 4, 5, 10, 12, 13, 15, 16, 17, 23, 25, 26, 29, 30, 32, 33, 35, 36, 37], "ones": [4, 20, 30, 32, 37], "onli": [0, 2, 4, 5, 6, 7, 10, 14, 17, 23, 25, 26, 27, 32, 33, 35, 36, 37], "onlin": [7, 9, 32, 37], "open": [0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 14, 15, 16, 17, 20, 21, 25, 26, 27, 29, 30, 32, 33, 35, 36, 37], "open_source_licens": 35, "opencollect": 0, "opensus": 2, "openteam": 2, "oper": [0, 2, 8, 9, 15, 30, 32, 33, 35, 37], "opt_weight": 33, "opt_weights_1": 33, "opt_weights_2": 33, "optim": [14, 31, 35], "optimal_weight": 33, "option": [0, 2, 3, 4, 7, 9, 15, 18, 21, 23, 24, 30, 32, 33, 35, 36, 37], "option_correct": 37, "order": [1, 8, 12, 19, 20, 21, 23, 29, 33, 35, 37], "org": [2, 33, 35, 37], "organ": [0, 33, 35, 36], "orient": [2, 33, 37], "origin": [23, 25, 37], "other": [0, 3, 4, 8, 10, 14, 16, 17, 23, 24, 26, 27, 29, 30, 32, 33, 35, 36, 37], "otherwis": [0, 2, 10, 25, 29, 33, 35], "our": [0, 2, 22, 23, 24, 27, 29, 30, 32, 33, 34, 37], "out": [1, 2, 4, 11, 16, 20, 21, 23, 25, 27, 29, 30, 32, 33, 37], "outlier": 37, "outlin": [4, 9, 30, 32, 33], "output": [4, 14, 16, 23, 26, 29, 30, 35, 37], "outsid": [4, 20, 25, 37], "over": [4, 5, 7, 14, 30, 32, 33, 35, 36, 37], "overal": [16, 32], "overflow": [0, 23, 27], "overli": 37, "overrid": [25, 35], "overview": [33, 37], "own": [0, 2, 4, 7, 11, 14, 23, 24, 27, 30, 33, 35, 36], "owner": 37, "p": [4, 35, 37], "p_": 37, "p_valu": 37, "packag": [0, 1, 2, 3, 10, 11, 15, 16, 19, 23, 24, 25, 26, 27, 29, 32, 33, 37], "packt": 33, "pad": 20, "page": [0, 2, 10, 11, 23, 29, 32, 34], "paid": [0, 24], "palett": 37, "palm": 35, "palplot": 37, "pan": 3, "panda": [2, 17, 24, 32, 33, 37], "pane": [0, 1, 19, 20, 21, 22, 23, 25, 29, 30, 31, 35], "panel": [2, 12, 30, 33, 36, 37], "paper": [35, 37], "parallel": 36, "paramet": [4, 33, 35, 37], "parent": [14, 35, 36], "parenthes": 37, "parenthesi": [4, 7], "parquet": 37, "pars": [6, 32], "parsed_data_publ": 37, "parser": 32, "part": [0, 4, 5, 22, 26, 33, 35, 37], "parti": [2, 3, 10, 11, 32, 35], "partial": 37, "particip": [33, 35, 37], "particular": [14, 23, 32, 35, 37], "particularli": [2, 5, 23, 24, 26, 32, 33], "partit": 0, "pass": [33, 35, 36, 37], "password": [10, 35], "past": [5, 10, 13, 16, 17, 20, 21, 29, 32, 35], "patch": 28, "path": [0, 4, 5, 10, 12, 14, 15, 16, 19, 23, 26, 30, 32, 33, 35, 37], "pathlib": 35, "pattern": 5, "paus": [26, 35], "pause_pomodoro_tim": 35, "pause_tim": 35, "pause_timer_act": 35, "pct_chang": 33, "pd": [33, 37], "pdb": 3, "peopl": [33, 37], "pep": 4, "per": [0, 4, 19, 33], "percent": 33, "percentag": [19, 33], "perfect": 33, "perform": [0, 5, 11, 14, 15, 17, 23, 32, 33, 35, 37], "period": [33, 35, 37], "permiss": 26, "persist": [17, 33, 37], "person": [2, 35, 37], "pet": 37, "pfe": 33, "pfizer": 33, "phenomenon": 37, "phrase": 8, "pick": 37, "pickl": 17, "pictur": 35, "pid": 10, "piec": [33, 35, 37], "pin": 2, "pip": [0, 23, 25, 29, 33, 35], "pitfal": 23, "pivot": 37, "plabel": 35, "place": [0, 4, 19, 23, 24, 27, 33, 35, 37], "plai": 35, "plain": [7, 16, 29, 30], "plan": 35, "platform": [2, 28, 33, 37], "pleas": [2, 23, 25, 27, 29], "plot": [3, 4, 9, 10, 17, 20, 30, 32, 35], "plt": [33, 37], "plu": [6, 20, 32], "plug": 25, "plugin": [0, 2, 9, 19, 20, 21, 24, 27, 28, 34, 36], "plugin_registr": 35, "plugin_typ": 35, "pluginconfigpag": 35, "pluginmaincontain": 35, "pluginmainwidget": 35, "png": [13, 32], "point": [0, 3, 14, 24, 30, 33, 35, 36, 37], "pointi": 37, "polar": 33, "polish": 37, "pomodoro_button": 35, "pomodoro_default": 35, "pomodoro_limit": 35, "pomodoro_menu": 35, "pomodoro_spin": 35, "pomodoro_tim": 35, "pomodoro_timer_button": 35, "pomodoro_timer_menu": 35, "pomodoro_timer_statu": 35, "pomodoro_timer_toolbar": 35, "pomodoromenusect": 35, "pomodorotimerstatu": 35, "pomodorotoolbaract": 35, "pomodorotoolbarsect": 35, "pop": [2, 4, 30], "popular": [4, 25, 37], "popup": 7, "popupmod": 35, "port": [2, 10], "port_1_exp_r": 33, "port_1_ow": 33, "port_1_sr": 33, "port_1_vr": 33, "port_2_exp_r": 33, "port_2_ow": 33, "port_2_sr": 33, "port_2_vr": 33, "portfolio": 34, "portfolio_return": 33, "portfolio_shap": 33, "portfolio_sharp": 33, "portfolio_volatil": 33, "portion": [7, 29], "pose": 37, "posit": [12, 30, 32, 33, 37], "possibl": [4, 19, 20, 21, 23, 27, 29, 33, 35, 37], "possibli": 37, "post": [2, 24, 26], "pot": 35, "potenti": [2, 4, 16, 32, 37], "power": [1, 4, 16, 20], "powershel": 21, "ppf": 37, "pprint": 33, "pr": 1, "practic": [16, 32, 35, 37], "pre": 36, "preced": 29, "precis": [33, 37], "predefin": 35, "predict": [33, 37], "prefer": [0, 2, 3, 4, 5, 7, 8, 10, 11, 13, 17, 18, 23, 26, 29, 30, 32, 33, 37], "prefil": 29, "prefix": [35, 37], "prepar": 34, "prerequisit": 34, "presenc": 35, "present": [15, 19, 25, 29, 33, 35], "preset": 35, "press": [0, 3, 4, 6, 7, 11, 14, 16, 20, 30, 32, 33, 36, 37], "prettier": 37, "prev_year": 33, "prevent": [10, 13, 32], "preview": [4, 17, 30], "previou": [3, 4, 10, 11, 14, 16, 23, 25, 30, 32, 33], "previous": [7, 20, 30, 32], "price": 33, "primari": [4, 10, 32, 33], "principl": 35, "print": [0, 26, 29, 30, 33, 35, 36, 37], "printf": 17, "prior": [33, 35, 37], "prioriti": [2, 29], "probabl": 37, "problem": [0, 1, 2, 4, 16, 24, 26, 27, 28, 29, 32, 33, 35, 37], "proce": [2, 33, 37], "procedur": [14, 33, 36], "process": [3, 4, 10, 23, 35, 36, 37], "processor": [0, 13, 32], "produc": [13, 37], "product": [26, 33, 35], "profil": [0, 1, 9, 16, 18, 30, 32, 34, 35], "profit": [0, 33], "program": [2, 5, 21, 23, 24, 27, 30, 32, 33, 35, 37], "progress": [14, 35], "prohibit": 0, "project": [0, 1, 4, 5, 6, 9, 12, 32, 35], "project_nam": 35, "project_package_nam": 35, "project_pypi_nam": 35, "project_short_descript": 35, "prompt": [0, 2, 3, 16, 19, 20, 21, 23, 25, 26, 29, 30, 32, 33, 35, 36, 37], "proofread": 1, "properli": 35, "properti": [33, 35], "proport": [33, 37], "protocol": [4, 25], "proven": 37, "provid": [1, 2, 4, 10, 11, 13, 17, 23, 24, 25, 26, 29, 30, 32, 33, 35, 36, 37], "proxi": 37, "psychologi": 37, "psychometr": 37, "pt_limits_layout": 35, "public": [24, 35, 37], "publish": [34, 37], "pure": 7, "purelib": 26, "purpos": [0, 1, 35, 37], "put": [33, 35, 37], "py": [8, 16, 23, 25, 26, 32, 35, 36, 37], "py3": [8, 23, 35], "py39": 2, "pyarrow": 37, "pyc": 35, "pycodestyl": 4, "pydata": [2, 37], "pydoc": 11, "pyenv": 0, "pyflak": 4, "pyl": [0, 25], "pylab": 10, "pylint": [16, 32], "pylintrc": [16, 32], "pypi": [0, 33], "pypi_usernam": 35, "pyplot": [33, 37], "pyqt": [23, 29, 35], "pyqt5": 2, "pysid": 35, "python": [0, 1, 2, 3, 4, 5, 7, 10, 11, 12, 16, 17, 19, 21, 23, 25, 26, 27, 28, 29, 30, 32, 35], "python3": [2, 26], "pythonpath": 15, "pyzmq": [23, 25], "q": [0, 36, 37], "q18154": 37, "q255": 37, "q997": 37, "qaction": [35, 36], "qapp": 36, "qapplic": 36, "qdialog": 36, "qdockwidget": 35, "qevent": 36, "qgridlayout": [35, 36], "qgroupbox": 35, "qhboxlayout": 36, "qicon": 35, "qmainwindow": [35, 36], "qmenu": 36, "qmessagebox": 35, "qspinbox": 35, "qstackedlayout": 36, "qt": [23, 29, 34, 35], "qt5": 3, "qt_mac_wants_lay": 0, "qta": 35, "qtawesom": 35, "qtconsol": [10, 23, 24, 27, 29], "qtgui": 35, "qtimer": 35, "qtoolbar": 36, "qtoolbutton": 35, "qtpy": 35, "qtwidget": 35, "qu4nt": 35, "qualit": 37, "qualiti": [16, 31], "quansight": 0, "quantit": 37, "quantiti": 17, "queri": 33, "question": [1, 2, 24, 27, 33, 37], "question_data": 37, "quick": [2, 20, 24, 30, 33, 37], "quickli": [4, 23, 25, 27, 32, 35, 37], "quickstart": [22, 33, 37], "quirk": 24, "quit": [2, 33, 35, 37], "quotat": 17, "qvboxlayout": [35, 36], "qwidget": [35, 36], "r": [4, 14, 24, 37], "rais": 37, "ram": 0, "ran": 14, "ranaroussi": 33, "random": [29, 33, 37], "randomli": 33, "rang": [1, 16, 24, 33, 37], "rapid": 33, "rate": 35, "rather": [12, 21, 23, 29], "ratio": 37, "raw": 16, "rc": 32, "rcfile": 16, "rcparam": 33, "re": [2, 4, 5, 10, 11, 19, 20, 21, 23, 25, 26, 27, 29, 30, 32, 33, 35, 37], "reach": [1, 33, 35, 37], "read": [2, 4, 23, 26, 27, 34], "read_csv": [33, 37], "read_parquet": 37, "read_text": 35, "readabl": [4, 35, 37], "reader": 35, "readi": [20, 30, 32, 33, 35, 37], "readm": 35, "real": [4, 10, 25, 33, 35, 37], "realist": 33, "realiti": 33, "realized_pr": 33, "realli": [23, 37], "realtim": 11, "rearrang": 30, "reason": [2, 14, 32, 37], "recal": [3, 14, 32], "receiv": [23, 25, 27, 33, 36], "recent": [0, 4, 8, 16, 20, 23, 33, 35], "recogn": [0, 35], "recommend": [0, 2, 26, 27, 28, 33, 35, 37], "record": [26, 33, 37], "recov": 17, "recreat": [2, 33], "recurs": 14, "red": [10, 11, 30, 33], "redistribut": 0, "reduc": [32, 37], "reduct": 37, "refactor": 37, "refer": [2, 3, 25, 26, 33, 35, 37], "refin": 6, "reflect": 33, "refresh": [10, 11, 17, 33], "regardless": [4, 15, 35], "regex": 37, "regist": 10, "register_plugin_prefer": 35, "regul": 37, "regular": [3, 4, 6, 32, 35, 37], "reilli": 33, "reinforc": 33, "reinstal": [0, 26, 27, 28], "rejoic": 37, "rel": [0, 2, 5, 32, 33], "relat": [2, 9, 23, 26, 27, 28, 33, 34, 35, 36], "relationship": [33, 35, 37], "relaunch": 10, "releas": [0, 2, 23, 35], "relev": [4, 23, 25, 27, 29, 37], "reli": 35, "reliabl": [2, 17], "reload": [9, 11, 35], "remain": [32, 37], "remark": 33, "rememb": [8, 10, 16, 33, 35, 37], "remotemachin": 0, "remov": [0, 2, 10, 13, 14, 17, 23, 30, 32, 35, 37], "renam": [5, 10, 17, 21, 25, 33, 35, 37], "rename_axi": 33, "render": [4, 7, 11, 13, 35, 36], "reoccur": 23, "reopen": 23, "reorder": 4, "repair": 26, "repeat": 35, "replac": [0, 16, 25, 26], "repo": [1, 35], "report": [0, 2, 23, 25, 26, 27, 28, 34], "repositori": [0, 1, 2, 5, 14, 15, 25, 33, 34], "repres": [33, 36, 37], "represent": 36, "reproduc": [23, 29], "request": [2, 33, 35], "requir": [0, 1, 25, 33, 35, 36, 37], "resampl": 33, "reset": [0, 8, 23, 26, 30, 35], "reset_index": 33, "residu": 37, "resiz": 17, "resolv": [1, 2, 23, 25, 26, 35], "resourc": [0, 1, 23, 27, 28, 33, 35], "resp": 37, "resp_": 37, "resp_q18154": 37, "resp_q255": 37, "respect": [3, 13, 16, 30, 33, 35], "respond": 35, "respons": [36, 37], "rest": [14, 30, 32, 33, 35, 37], "restart": [0, 8, 10, 19, 20, 21, 23, 25, 30, 35], "restor": [4, 15, 23], "restrict": 0, "result": [0, 4, 6, 9, 11, 16, 17, 19, 25, 26, 27, 30, 32, 33, 35, 37], "retriev": 7, "retrieve_data": 33, "rets_1": 33, "rets_2": 33, "return": [4, 6, 11, 26, 30, 35, 37], "reveal": 37, "review": 33, "rgb": 17, "rich": [2, 7, 30], "right": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 17, 20, 21, 25, 30, 32, 33, 35, 37], "right_answ": 37, "rigor": 37, "ring": 35, "risk": 33, "riski": 33, "robust": 2, "room": 24, "root": [15, 33, 35], "roughli": 33, "routin": 26, "row": [17, 33, 36, 37], "rule": [26, 36, 37], "run": [1, 3, 5, 9, 10, 11, 16, 17, 19, 20, 21, 23, 25, 26, 29, 30, 32, 33, 35, 36], "runtim": [10, 25, 32], "safer": 33, "sage": 37, "sai": [32, 33, 37], "said": 33, "same": [1, 2, 3, 4, 10, 14, 15, 20, 23, 25, 27, 30, 32, 33, 36, 37], "sampl": [29, 37], "satisfi": 37, "save": [2, 4, 6, 10, 13, 14, 15, 17, 20, 32, 33, 36, 37], "savefig": 33, "scalar": 17, "scale": [0, 13, 24, 33], "scatter": 33, "scenario": 33, "scheme": [23, 35], "scienc": [28, 35, 36, 37], "scientif": [0, 1, 2, 32, 33, 34, 35], "scientist": [1, 33, 37], "scikit": 0, "scipi": [2, 28, 33, 37], "scope": [6, 14, 16, 19, 35, 37], "score": [16, 32, 37], "scraper": 37, "scratch": [17, 20], "screen": [20, 25, 36, 37], "screenshot": 33, "script": [0, 2, 4, 5, 10, 16, 19, 23, 30, 32, 33, 37], "scroll": [0, 2, 4, 30, 32], "scrollbar": 4, "sdist": 35, "seaborn": 37, "seamlessli": [33, 37], "search": [2, 4, 9, 11, 17, 24, 29, 32, 33, 37], "second": [14, 30, 32, 34, 35, 37], "section": [0, 1, 2, 4, 16, 23, 25, 26, 27, 29, 30, 32, 33, 35, 37], "secur": [2, 17, 26, 33], "see": [0, 2, 3, 4, 5, 8, 10, 16, 17, 19, 20, 21, 23, 25, 26, 27, 29, 30, 32, 33, 35, 37], "seek": 2, "seem": [25, 33, 37], "seen": [30, 33, 37], "segment": 33, "select": [0, 2, 3, 5, 6, 7, 8, 10, 12, 13, 16, 17, 19, 20, 21, 25, 29, 30, 32, 33, 35, 36, 37], "self": [35, 36, 37], "send": 36, "sens": 33, "sensit": [4, 6, 11], "sep": 37, "separ": [3, 4, 10, 12, 16, 30, 33, 37], "sequenti": 13, "seri": [1, 17, 33, 37], "serif": 33, "seriou": 37, "serv": [20, 33, 35, 36, 37], "servedoc": 35, "server": [0, 4, 11, 20, 25, 35], "servic": [0, 24, 35], "session": [3, 8, 10, 13, 15, 17, 30, 33, 37], "set": [0, 1, 2, 3, 4, 5, 6, 10, 12, 15, 16, 17, 21, 26, 30, 32, 34], "set_axis_label": 37, "set_label": 33, "set_palett": 37, "set_pomodoro_limit": 35, "set_printopt": 33, "setcolumnstretch": 35, "setlayout": 35, "setmenu": 35, "setpopupmod": 35, "setup": [23, 35], "setup_pag": 35, "setuptool": 35, "sever": [3, 4, 5, 10, 13, 17, 29, 30, 32, 33, 35, 36, 37], "sexual": 37, "shape": 37, "share": [33, 34], "sharpe_ratio": 33, "sharpli": 33, "shell": [21, 23], "shift": [0, 3, 4, 12, 33, 35], "short": [30, 33, 35], "shortcut": [0, 2, 3, 7, 8, 9, 10, 14, 16, 23, 26, 32, 35], "shorten": 36, "shotgun": 23, "should": [0, 16, 17, 23, 25, 26, 27, 29, 30, 35, 37], "show": [3, 4, 5, 7, 8, 10, 11, 12, 16, 17, 19, 27, 29, 30, 32, 33, 35, 36, 37], "shown": [4, 7, 8, 10, 13, 15, 17, 19, 29, 32, 35], "side": [33, 35, 37], "sidebar": [4, 32], "sierra": 0, "sign": [4, 12, 33, 37], "signal": 35, "signific": [2, 37], "significantli": [33, 37], "silenc": 32, "sim_weight": 33, "similar": [0, 2, 4, 10, 23, 29, 33], "similarli": 35, "simpl": [1, 33, 35, 37], "simpler": 35, "simpli": [0, 2, 7, 10, 17, 25, 26, 27, 29, 32, 35, 37], "simplic": 37, "sinc": [20, 23, 29, 32, 33, 35, 36, 37], "singl": [5, 16, 26, 33, 35, 36], "site": [0, 24, 35, 37], "situat": [0, 29, 33, 37], "six": [19, 35], "size": [2, 4, 5, 11, 13, 17, 30, 32, 33, 37], "skew": 37, "skill": [33, 35], "skip": [3, 33, 37], "slabel": 35, "sleep": 14, "sleep_wrapp": 14, "slightli": 37, "slow": 0, "slower": 33, "smaller": [2, 33, 37], "smallest": [14, 33], "smarter": 37, "smartscreen": 2, "smoother": 33, "sn": 37, "snippet": [3, 4], "so": [0, 1, 3, 4, 5, 6, 7, 8, 15, 17, 20, 23, 25, 26, 27, 29, 30, 32, 33, 35, 36, 37], "softwar": [1, 26, 35], "sold": 33, "solut": [25, 27, 28], "solv": [0, 1, 2, 23, 26, 27, 29, 33, 37], "some": [2, 4, 7, 22, 25, 26, 27, 30, 32, 33, 35, 36, 37], "someon": 27, "someth": [23, 24, 25, 26, 27, 33, 36, 37], "sometim": [2, 32, 33], "somewhat": [2, 37], "soon": 29, "sort": [4, 12], "sourc": [0, 1, 2, 4, 7, 10, 11, 12, 16, 17, 19, 23, 24, 25, 26, 27, 30, 32, 35], "space": [2, 4, 32, 35, 37], "speak": 37, "special": [9, 12, 25, 29, 33, 35, 36, 37], "specif": [0, 2, 3, 4, 5, 10, 11, 16, 23, 24, 25, 27, 29, 32, 33, 35, 36, 37], "specifi": [14, 29, 32, 33, 35, 37], "speed": [10, 32], "spend": 35, "spent": [14, 19, 32], "sphinx": [7, 35], "spinbox": 35, "spinner": 35, "split": 30, "spoiler": 37, "sponsor": 0, "spot": 4, "spotlight": 2, "spydata": 17, "spyder": [3, 4, 5, 7, 8, 10, 14, 15, 16, 17, 18, 22, 26, 27, 28, 29, 31, 34, 36], "spyder3": 2, "spyder5": 35, "spyder_kernel": [0, 10], "spyder_pomodoro_tim": 35, "spyder_unittest": 25, "spyderpomodorotim": 35, "spyderpomodorotimerconfigpag": 35, "spyderpomodorotimercontain": 35, "spyderwidgetmixin": 35, "squar": [11, 33], "ssh": 10, "sshd": 10, "stabl": [23, 33, 35], "stack": [0, 2, 23, 27, 33, 36], "stage": [0, 37], "stai": [1, 32, 37], "standalon": [0, 19, 20, 21, 29, 33, 35, 37], "standard": [0, 3, 4, 11, 16, 17, 23, 25, 27, 32, 35, 36, 37], "start": [0, 1, 2, 4, 10, 12, 17, 23, 24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37], "start_i": 33, "start_pomodoro_tim": 35, "start_tim": 35, "start_timer_act": 35, "start_year": 33, "startswith": 37, "startup": [2, 26], "stat": 37, "state": [17, 35, 37], "statement": [3, 8, 14, 35, 37], "static": [7, 13, 33, 37], "statist": [33, 37], "statu": [25, 30, 35, 36], "statusbar": [0, 35], "statusbarwidget": 35, "std": 33, "steadi": 33, "step": [0, 1, 2, 3, 4, 7, 10, 25, 26, 28, 29, 31, 33], "still": [0, 2, 3, 10, 25, 27, 32, 33, 37], "stop": [0, 2, 3, 10, 11, 14, 16, 35], "stop_pomodoro_tim": 35, "stop_tim": 35, "stop_timer_act": 35, "store": [6, 8, 17, 20, 30, 33, 37], "str": 37, "straightforward": [2, 8], "strict": 2, "string": [4, 6, 25, 32, 33, 35, 37], "stroke": [13, 33], "stronger": 19, "strongli": [0, 2, 10, 23, 27], "structur": 32, "style": [16, 17, 30, 32, 33, 35, 37], "stylist": 37, "sub": [14, 27, 32], "subdirectori": 5, "subject": 2, "submenu": 25, "submit": [0, 1, 2, 24, 26, 27, 28], "subplot": 37, "subprocess": 0, "subscrib": 2, "subsect": [4, 12], "subset": 37, "substitut": [2, 35], "subsystem": 0, "succe": 16, "success": [0, 35], "successfulli": 26, "sudo": 2, "suffix": 35, "suggest": [3, 23, 33, 37], "suit": [5, 11], "suitabl": 35, "sum": [33, 37], "summar": [33, 37], "summari": [1, 2, 4, 7, 33, 35, 37], "super": 35, "supervis": 33, "support": [0, 2, 4, 8, 9, 17, 19, 23, 25, 27, 33, 37], "suppos": [14, 33], "suppress": [16, 32, 33], "sur": 0, "sure": [0, 2, 11, 23, 24, 25, 26, 27, 29, 32, 35, 37], "surround": 13, "svg": 13, "switch": [2, 3, 4, 13, 20, 21, 30, 32], "switcher": 12, "sy": [0, 10, 26], "symbol": [10, 33], "symbols_1": 33, "symbols_2": 33, "symmetr": 37, "sympi": [2, 10, 24, 33, 37], "synchron": 32, "syntax": [0, 3, 8, 17, 23, 30, 35], "sysconfig": 26, "system": [0, 2, 5, 8, 10, 15, 21, 23, 26, 29, 32, 35, 36, 37], "systemat": 37, "t": [0, 1, 2, 4, 10, 16, 17, 20, 23, 24, 25, 26, 27, 29, 30, 32, 33, 35, 37], "tab": [0, 3, 5, 10, 12, 13, 19, 20, 21, 30, 32, 33, 36, 37], "tabl": [0, 25, 33], "tag": 35, "tail": 37, "take": [0, 1, 19, 20, 29, 30, 32, 33, 35, 37], "taken": [14, 19, 32, 33, 37], "talent": 35, "tar": 35, "task": [2, 32, 33, 35, 36, 37], "taskbar": 2, "tast": 2, "team": [2, 24, 29, 35], "technic": [10, 37], "techniqu": [26, 35], "technologi": 33, "tell": [27, 32, 35, 37], "templat": [4, 29, 35], "temporari": 20, "ten": 17, "tend": [23, 33], "tensorflow": 37, "term": [0, 33], "termin": [0, 2, 16, 18, 19, 20, 23, 25, 26, 32, 33, 35, 37], "test": [10, 25, 33, 34], "test_item": 37, "text": [0, 4, 5, 6, 7, 8, 16, 17, 21, 30, 32, 35, 36, 37], "textbox": 7, "than": [0, 2, 12, 17, 21, 23, 24, 25, 29, 32, 33, 35, 37], "thank": [2, 33, 37], "thei": [0, 2, 3, 5, 10, 17, 24, 30, 33, 35, 36, 37], "them": [2, 3, 4, 5, 6, 7, 13, 14, 17, 19, 20, 24, 29, 30, 32, 33, 35, 36, 37], "theme": [0, 4, 30], "themselv": 37, "theoret": [33, 37], "theori": [33, 34], "therefor": [2, 14, 32, 33], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 17, 19, 20, 21, 23, 24, 25, 26, 29, 30, 32, 33, 35, 36, 37], "thin": 13, "thing": [35, 36, 37], "think": [34, 35], "third": [2, 3, 10, 11, 32, 34, 35, 37], "this_directori": 35, "thoroughli": 30, "those": [10, 13, 17, 22, 23, 24, 25, 26, 27, 30, 32, 33, 35, 36, 37], "though": [2, 23, 30], "thought": 37, "thousand": [32, 33, 35], "three": [14, 29, 30, 32, 33, 35, 37], "through": [0, 1, 2, 3, 4, 6, 7, 10, 11, 13, 17, 22, 24, 32, 35], "throughout": [22, 33, 35, 37], "thu": [2, 35, 36, 37], "ticker": 33, "time": [3, 4, 10, 14, 15, 19, 25, 26, 29, 32, 33, 35, 36], "timeit": 3, "timeout": 35, "timer": 34, "timestamp": [8, 32], "tip": 35, "titl": [11, 29, 33, 35], "to_datetim": 32, "todai": 37, "togeth": [33, 35, 37], "toggl": [5, 6, 7, 8], "token": 33, "told": 32, "tolist": 37, "too": [16, 17, 20, 30, 37], "took": [14, 32], "tool": [0, 1, 2, 4, 5, 32, 33, 35, 37], "toolabr": 35, "toolbar": [0, 3, 4, 5, 9, 12, 16, 30, 32, 33, 37], "toolbox": 32, "toolkit": [35, 36], "tooltip": 35, "top": [4, 5, 6, 7, 8, 11, 12, 13, 14, 17, 20, 30, 32, 35], "topic": [2, 11, 33, 37], "total": [4, 14, 19, 32], "touch": 35, "tour": 1, "toward": [14, 33, 37], "tqdm": 33, "traceback": [25, 26, 27, 29], "track": [24, 32], "tracker": [1, 2, 23, 27, 29], "trackpad": 33, "trade": 33, "traitlet": 25, "transact": 33, "transcript": [30, 32], "transform": [33, 37], "translat": 35, "transpar": 37, "treat": [4, 17], "tree": [15, 35], "trend": 33, "tri": 29, "triangular": 37, "trick": 28, "tricki": [2, 27], "trigger": [3, 4, 7, 29, 35, 36], "troubleshoot": [1, 2, 4, 24, 25, 27, 29], "true": [33, 35, 37], "trust": 17, "try": [0, 23, 25, 26, 27, 29, 30, 32, 33, 35, 37], "tune": 32, "turn": [7, 10, 14, 16, 32], "tutori": [1, 7, 30, 33, 35, 37], "tweak": 35, "twine": 35, "two": [4, 14, 17, 30, 32, 33, 35, 36, 37], "type": [0, 2, 4, 5, 7, 10, 14, 17, 21, 25, 26, 30, 32, 33, 34, 36, 37], "typic": [0, 2, 4, 8, 10, 35], "tzf": 35, "u": [1, 23, 25, 32, 33, 35, 37], "ubuntu": 0, "ultim": 33, "umr": 10, "un": 14, "unabl": [2, 25], "uncheck": [10, 17, 30, 33], "under": [0, 2, 3, 4, 5, 6, 7, 10, 13, 14, 16, 17, 19, 20, 21, 23, 25, 26, 29, 30, 32, 37], "undermin": 37, "underneath": 14, "understand": [4, 9, 24, 30, 32, 33, 35, 37], "understood": 33, "undesir": 33, "undivid": 35, "undock": [21, 30, 35], "uninstal": [2, 23, 26, 27], "unintend": 2, "uniqu": [1, 37], "unit": [14, 33], "unittest": [0, 25], "unix": 2, "unless": [2, 10, 23], "unlik": [4, 27, 29], "unscientif": 37, "unsupervis": 33, "unsystemat": 37, "until": [23, 33, 35, 36], "unus": 32, "unusu": 29, "unzip": 37, "up": [0, 1, 2, 3, 4, 5, 10, 11, 23, 26, 27, 29, 32, 34], "updat": [17, 23, 25, 30, 32, 33, 37], "update_act": 35, "update_tim": 35, "upgrad": [2, 23], "upper": [21, 33, 35, 37], "uppercas": 33, "upward": 37, "url": 35, "us": [1, 3, 4, 5, 7, 9, 12, 13, 14, 17, 18, 23, 24, 25, 26, 30, 32, 35, 36, 37], "usabl": 0, "usag": [2, 9, 14, 24, 29], "usd": 33, "user": [0, 1, 2, 4, 6, 8, 10, 15, 16, 20, 23, 24, 25, 26, 27, 30, 32, 35, 36, 37], "usernam": [0, 8, 10, 35], "usual": [0, 2, 10, 23, 26, 35, 36], "util": [35, 36, 37], "v": [33, 37], "v3": 35, "valid": [35, 37], "valu": [16, 17, 30, 32, 33, 35, 37], "value_count": 37, "vari": 33, "variabl": [0, 2, 3, 4, 9, 10, 12, 13, 20, 26, 30, 32, 34, 35], "varianc": [33, 37], "variat": [33, 37], "varieti": [0, 1, 4, 17, 23, 25, 32, 33, 37], "variou": [17, 25, 33, 35], "vast": 37, "ve": [0, 1, 2, 5, 8, 10, 17, 23, 24, 29, 32, 35], "vector": 33, "venv": [0, 2, 23], "verbos": 23, "veri": [8, 17, 23, 24, 30, 32, 33, 35, 36, 37], "verifi": [35, 37], "versa": 26, "versatil": 37, "version": [0, 2, 9, 10, 21, 23, 29, 30, 33, 35], "vertic": [4, 30, 35], "via": [0, 2, 3, 7, 10, 15, 17, 26, 35], "viabl": 2, "vibrant": 24, "vice": 26, "video": [0, 1, 23, 24, 30, 32], "view": [3, 4, 5, 6, 8, 11, 12, 15, 16, 19, 20, 21, 23, 25, 27, 29, 30, 32, 33, 35], "viewer": [9, 30], "violat": [16, 37], "virtual": [0, 2, 35, 37], "virtualenv": [0, 23], "virtualenvwrapp": 2, "visibl": [16, 25, 32, 36], "visit": [0, 1, 2, 11, 14, 23, 33, 35, 37], "visual": [1, 17, 33, 34, 35, 36], "vlayout": 35, "volat_ret": 33, "volum": 33, "vscode": [4, 25], "w": [0, 4, 37], "wa": [4, 6, 14, 17, 23, 25, 30, 32, 33, 35, 37], "wai": [0, 1, 2, 3, 5, 8, 13, 19, 20, 21, 23, 28, 30, 32, 33, 35, 36, 37], "walk": 22, "want": [0, 2, 3, 4, 5, 6, 10, 11, 13, 17, 20, 25, 27, 29, 30, 32, 33, 35, 37], "warn": [2, 4, 32, 33, 37], "warren": 33, "watch": [0, 1, 23, 35], "we": [0, 1, 2, 17, 19, 20, 21, 22, 23, 24, 26, 27, 30, 32, 33, 34, 36, 37], "web": [0, 1, 2, 11, 20, 29, 32, 35], "webpag": 0, "websit": [2, 25, 35, 37], "weight": 2, "weights_1": 33, "weights_2": 33, "weim": 33, "welcom": [2, 20, 22, 23], "well": [0, 3, 4, 17, 23, 24, 25, 26, 30, 33, 35, 37], "were": [23, 33, 35, 37], "what": [0, 2, 4, 23, 28, 30, 32, 33, 34, 36, 37], "whatev": [4, 23, 25, 33], "wheel": 35, "when": [0, 2, 4, 5, 7, 8, 10, 11, 12, 17, 19, 20, 21, 30, 32, 33, 35, 36, 37], "whenev": [0, 10, 23], "where": [2, 4, 6, 11, 14, 16, 17, 20, 24, 28, 30, 32, 33, 35, 36, 37], "wherev": [13, 23, 32], "whether": [8, 10, 15, 25, 29, 33, 35, 37], "which": [0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 20, 23, 25, 26, 29, 30, 32, 33, 35, 36, 37], "while": [0, 2, 3, 4, 7, 8, 10, 14, 23, 25, 30, 32, 33, 37], "whisker": 37, "whitespac": 32, "whl": 35, "who": [2, 30, 33, 37], "whole": [0, 4, 16, 32], "why": [16, 23], "wick": 37, "wide": [1, 35, 37], "wider": [0, 32, 37], "widget_class": 35, "width": 33, "wiki": 2, "window": [0, 3, 8, 16, 19, 20, 21, 23, 25, 26, 29, 30, 32, 33, 35, 37], "winpython": [0, 2], "wish": 19, "within": [0, 11, 14, 16, 29, 32, 33, 35, 37], "without": [0, 2, 5, 7, 10, 15, 16, 25, 30, 32, 33, 35, 37], "wizard": 2, "won": [0, 10, 27, 29], "word": [4, 8, 13, 32, 34], "work": [0, 2, 3, 4, 5, 6, 9, 10, 16, 17, 19, 20, 21, 23, 26, 27, 28, 29, 30, 31, 34, 35], "workaround": 0, "workflow": [7, 30], "workon": 2, "workshop": [33, 35, 37], "world": [1, 30, 33, 35, 37], "worri": 37, "worth": 33, "would": [4, 14, 23, 30, 33, 35, 37], "wouldn": 37, "wrap": 8, "write": [32, 33, 34, 35], "written": [1, 23, 25, 27, 30, 33, 37], "wrong": [26, 32, 37], "wrote": 35, "wsl": 0, "wsl2": 0, "x": [32, 33, 37], "x64": 0, "xlabel": [33, 37], "y": [23, 32, 33, 37], "yahoo": 33, "ye": [0, 2, 35], "year": [33, 37], "yet": [2, 33], "yf": 33, "yfinanc": 33, "ylabel": [33, 37], "ylim": 37, "you": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 32, 33, 35, 37], "young": 37, "your": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13, 14, 15, 16, 17, 19, 20, 21, 23, 24, 25, 26, 27, 28, 30, 31, 33, 34, 37], "your_usernam": [23, 25], "yourself": [17, 23], "yve": 33, "z": [32, 37], "zeneca": 33, "zero": [33, 35], "zodiac": 37, "zoom": [3, 11, 13, 20, 21, 32], "zsh": 21}, "titles": ["Frequently Asked Questions", "Welcome to Spyder\u2019s Documentation", "Install Guide", "Debugger", "Editor", "Files", "Find", "Help", "History", "Panes", "IPython Console", "Online Help", "Outline", "Plots", "Profiler", "Projects", "Code Analysis", "Variable Explorer", "Plugins", "Spyder Line Profiler", "Spyder Notebook", "Spyder Terminal", "Tour", "Basic First Aid", "Calling for Help", "Common Illnesses", "Emergency CPR", "First Steps", "Troubleshooting", "Submit a Report", "First Steps with Spyder", "Tutorials", "Working with Spyder", "Financial Data Analysis with Spyder", "Workshops", "Plugin Development with Spyder", "Qt Fundamentals", "Scientific Computing and Visualization with Spyder"], "titleterms": {"": [1, 24, 35], "1": 37, "2": 37, "A": 33, "The": [35, 37], "With": [33, 37], "abil": 37, "about": 0, "action": [35, 36], "activ": 37, "add": 35, "addit": [2, 20], "advanc": [3, 8, 16, 17, 26], "ag": 37, "aid": 23, "all": 25, "altern": 2, "an": [20, 29, 33, 37], "anaconda": [2, 24], "analysi": [4, 16, 33, 37], "analyz": 16, "anoth": 25, "anova": 37, "arrai": 17, "ask": 0, "associ": 5, "attributeerror": 25, "automat": [4, 7], "base": 2, "basic": [23, 30, 36, 37], "beyond": 32, "breakpoint": 3, "bug": 25, "build": [2, 35, 37], "button": 17, "call": 24, "can": [35, 37], "cannot": 25, "carlo": 33, "cell": 4, "chang": [10, 35], "channel": 24, "check": 35, "choos": 6, "class": 4, "code": [1, 4, 16, 32, 33, 37], "cognit": 37, "command": [33, 37], "common": [25, 26], "commun": 1, "comparison": 33, "compat": 25, "complet": [4, 25], "compon": [4, 36], "comput": 37, "conda": [2, 33, 37], "configur": [4, 35], "connect": [10, 20], "consol": [10, 20, 33, 37], "contain": 35, "contribut": 1, "control": [5, 7, 15, 35], "cpr": 26, "creat": [15, 35], "cryptocurr": 33, "custom": 30, "daili": 33, "data": [24, 33, 37], "datafram": 17, "dataset": [33, 37], "debian": 2, "debug": [3, 23], "debugg": 3, "default": 35, "depend": 25, "develop": [2, 35], "deviat": 33, "dialog": 36, "dictionari": 17, "directori": 37, "discov": 35, "distribut": [2, 37], "do": [35, 37], "doc": 1, "docstr": 25, "document": [1, 24], "doe": 25, "download": [2, 33, 37], "edit": 4, "editor": [4, 33, 37], "emerg": 26, "enhanc": 35, "environ": [2, 33, 35, 37], "error": 25, "event": 36, "exchang": 24, "expect": 33, "explain": 33, "explor": [17, 33, 37], "extern": 10, "faq": 24, "featur": [3, 4, 10, 35], "file": [4, 5, 37], "final": [33, 35, 37], "financi": 33, "find": [4, 6], "first": [23, 27, 30, 33, 35], "fit": 13, "format": [4, 37], "found": 25, "frequent": 0, "from": [2, 27, 37], "function": [4, 17, 33], "fundament": 36, "further": [33, 35, 37], "gener": 33, "get": [7, 30, 35], "gitter": 24, "glanc": 33, "go": [1, 4, 27], "goal": [33, 35, 37], "googl": 24, "group": 24, "guid": 2, "ha": 25, "help": [1, 2, 7, 11, 24, 25, 37], "here": 27, "highlight": 4, "histor": 33, "histori": 8, "homework": [33, 35, 37], "hover": 7, "how": [35, 37], "hypothesi": 37, "i": 33, "icon": 12, "id": 33, "ill": 25, "import": 7, "importerror": 25, "improv": 32, "includ": 29, "incompat": 25, "inform": 33, "inlin": 13, "instal": [0, 2, 19, 20, 21, 25], "interest": 1, "interfac": 4, "interpret": 14, "intro": [33, 37], "introduct": [33, 37], "introspect": 4, "ipdb": 3, "ipython": [10, 20, 33, 37], "isol": 23, "issu": [25, 29], "item": 11, "join": 1, "jupyt": 24, "kei": 4, "kernel": [10, 25], "keyboard": 4, "layout": 36, "learn": [30, 33, 35, 37], "learner": [33, 37], "let": 35, "line": [4, 19], "lint": 4, "linux": 2, "list": 17, "local": 10, "look": 1, "lsp": 25, "maco": 2, "main": 32, "matplotlib": 3, "me": 37, "mean": 33, "media": 1, "menu": [5, 8, 10, 12, 13, 16, 17, 36], "method": [2, 37], "miss": 25, "mode": 7, "modul": 10, "mont": 33, "monte_carlo_sharp": 33, "monthli": 33, "mute": 13, "my": 37, "navig": 4, "notebook": 20, "now": 1, "numpi": 17, "object": [17, 25], "obtain": 33, "offici": 24, "onlin": [2, 11], "openteam": 24, "oper": 5, "optim": [32, 33], "option": [5, 6, 8, 10, 12, 13, 16, 17, 20], "org": 24, "other": [2, 25], "our": [1, 35], "outlin": [12, 13], "overflow": 24, "packag": 35, "page": [24, 35], "pane": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 32, 33, 37], "panel": 4, "part": 1, "patch": 23, "pharmaceut": 33, "pip": 2, "platform": 24, "plot": [13, 33, 37], "plugin": [14, 18, 25, 35], "pomodoro": 35, "pomodorotimertoolbar": 35, "portfolio": 33, "prefer": [21, 35], "prepar": [33, 37], "prerequisit": [33, 35, 37], "problem": [23, 25], "profil": [14, 19, 33, 37], "project": [15, 24], "propag": 35, "publish": 35, "pypi": 35, "python": [24, 33, 37], "qt": 36, "qualiti": 32, "question": 0, "ratio": 33, "read": [33, 35, 37], "realiz": 33, "recommend": 23, "regist": 35, "reinstal": 23, "relat": [3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 24, 37], "religion": 37, "reload": 10, "remot": 10, "replac": 4, "report": [29, 37], "repositori": 35, "research": 37, "resourc": 24, "result": 14, "return": 33, "review": 35, "run": [0, 2, 4, 14, 37], "scienc": 24, "scientif": 37, "scipi": 24, "search": 6, "second": 33, "section": 24, "select": 4, "selector": 4, "serios": 37, "set": [33, 35, 37], "share": 37, "sharp": 33, "shortcut": 4, "should": 33, "show": 13, "signal": 36, "simul": 33, "slot": 36, "social": 1, "solut": 26, "special": 10, "split": 4, "spyder": [0, 1, 2, 19, 20, 21, 23, 24, 25, 30, 32, 33, 35, 37], "spyderdockableplugin": 35, "spyderpluginv2": 35, "stack": 24, "standalon": 2, "standard": 33, "start": [25, 30, 35], "step": [23, 27, 30, 35, 37], "stock": 33, "stop": 25, "string": 17, "structur": 35, "style": 4, "stylish": 37, "submit": 29, "subreddit": 24, "support": [3, 5, 10, 24], "switcher": 4, "syntax": 4, "tab": 4, "tag": 24, "termin": 21, "test": [35, 37], "testpypi": 35, "theori": 37, "think": 37, "third": 33, "timelin": 33, "timer": 35, "toolbar": [11, 13, 17, 35, 36], "tour": 22, "translat": 1, "trick": 26, "troubleshoot": [0, 23, 28], "try": 2, "tutori": 31, "type": 35, "ubuntu": 2, "understand": 7, "up": [33, 35, 37], "updat": [0, 2, 35], "upload": 35, "us": [0, 2, 6, 8, 10, 11, 15, 16, 19, 20, 21, 33], "usag": 8, "variabl": [17, 33, 37], "version": [5, 15, 25], "viewer": 17, "virtual": 33, "visual": 37, "volatil": 33, "wai": 29, "want": 1, "we": 35, "websit": 24, "weight": 33, "welcom": 1, "what": [29, 35], "where": [1, 27], "why": [33, 37], "widget": [35, 36], "window": [2, 13, 36], "word": [33, 35, 37], "work": [15, 25, 32, 33, 37], "workshop": 34, "write": [1, 37], "yml": 37, "your": [1, 29, 32, 35], "youtub": 24}}) \ No newline at end of file diff --git a/5/troubleshooting/basic-first-aid.html b/5/troubleshooting/basic-first-aid.html index bda938d51..352e362c0 100644 --- a/5/troubleshooting/basic-first-aid.html +++ b/5/troubleshooting/basic-first-aid.html @@ -1,579 +1,474 @@ - - + + + - + + Basic First Aid — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + +
+
- - - - - - - - +
- - - - - - -
- -
-
-
-

Basic First Aid

+ +
+ +
+

Basic First Aid#

These suggestions, while more of a shotgun approach, tend to fix the majority of reported issues just on their own.

- - -
+
+

Reinstalling Spyder#

If none of the previous steps solve your issue, you should do a full uninstall of Spyder by whatever means you originally installed it.

For Anaconda, follow all the steps under Option B in the Anaconda uninstall guide, delete the Anaconda directory wherever it was originally installed, and (on Windows) remove the %appdata%/python directory if it exists.

Deleting appdata/python directory

Then, do a clean install of the latest version of the Anaconda distribution which is how we recommend you install Spyder and keep it up to date.

-
+

Important

While you are welcome to get Spyder working on your own by one of the many other means we offer, we are only able to provide individual support for install-related issues for users of the Anaconda distribution. In particular, pip installation, while doable, is only really for experts, as there are many pitfalls involved and different issues specific to your setup, which is why we recommend using Conda whenever possible. -For further information, please visit our Installation Guide.

-
+For further information, please visit our Install Guide.

-
-

Isolating problems

+
+
+

Isolating problems#

If you get an error while running a specific line, block, or script/program, it may not be an issue with Spyder, but rather something lower down in the packages it depends on. Try running it in the following in order if and until it starts working as you expect. If you manage to isolate the bug, report it to the last one it doesn’t work in.

@@ -648,195 +543,139 @@

Isolating problemspython path/to/your/file.py or launched interactively with python from your Anaconda Prompt/Terminal/command line (Windows/Mac/Linux). While it is not impossible that you’ve found Python bug, it is much more likely to be an issue with the code itself or a package you are using, so your best sources are the Python docs and the other resources listed above.

-
+

Tip

If the problem reoccurs in a similar or identical way with any of these methods (other than only Spyder itself), then it is almost certainly not an issue with Spyder, and would be best handled elsewhere. As we usually aren’t able to do much about issues not related to Spyder, a forum like Stack Overflow or the relevant package’s docs is a much better place to get help or report the issue.

See the Calling for Help section for other places to look for information and assistance.

-
-
-

Debugging and patching

+

+
+

Debugging and patching#

If you know your way around Python, you can often diagnose and even fix Spyder issues yourself, since the IDE is written in the same language you use in it. You can explore the error messages you’re receiving and Spyder’s inner workings with the Internal Console, available under the menu item View ‣ Panes ‣ Internal Console.

Spyder showing Internal console

For more detailed debug output, start Spyder from the command line (Anaconda Prompt on Windows) with spyder --debug-info verbose.

Even if you don’t manage to fix the problem yourself, this output can be very helpful in aiding us to quickly narrow down and solve your issue for you.

-
-
+ + -
+ - - - - -
+
+ + +
+
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/troubleshooting/call-for-help.html b/5/troubleshooting/call-for-help.html index 26fa8b0e1..b2e2b5ce4 100644 --- a/5/troubleshooting/call-for-help.html +++ b/5/troubleshooting/call-for-help.html @@ -1,937 +1,679 @@ - - + + + - + + Calling for Help — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+ +
+ +
+ + + + +
+
- - - - - - - - +
- - - - - -
- -
-
-
-

Calling for Help

+ +
+ +
+

Calling for Help#

Aside from this troubleshooting guide, there are a number of other sources of documentation and troubleshooting information you can check before submitting an issue, as they might already offer an answer, or at least help you better understand the problem. Even if we aren’t able to help you, these places might.

-
+
+

Spyder’s YouTube channel#

Our YouTube channel contains helpful videos that will guide you through many of Spyder’s features, and provide a starting point for newer users.

-
-
-

Spyder Gitter

+ +
+

Spyder Gitter#

We have a public Gitter room where you can chat directly with the Spyder developers. If you’ve got a quick question to ask the team and are looking for a quick answer, this is a great place to go.

-
-
-

Spyder Google Group

+ +
+

Spyder Google Group#

Our Google Group is great for help-related questions, particularly those you aren’t sure are a full-on Spyder issue.

-
-
-

Spyder website

+ +
+

Spyder website#

The Spyder site contains basic information about the IDE and links to many other helpful resources.

-
-
-

Stack Overflow tag

+ +
+

Stack Overflow tag#

Stack Overflow is a great place to start searching and posting, particularly if your question is more programming-related, or has to do with something specific to your own code. It has an vibrant Spyder community as well, with new questions posted every day, and the developers (especially Carlos Cordoba, the lead maintainer) are active in answering them.

-
-
-

OpenTeams support

+ +
+

OpenTeams support#

On OpenTeams, you can get help from expert Spyder consultants. OpenTeams offers services from Spyder experts ranging from a brief consultation to an experienced team to help you with a large scale implementation project.

-
-
-
-

Python resources

-
-

Official Python help page

+ + +
+

Python resources#

+
+

Official Python help page#

The Python help page is a great resource that lists a number of places you can get assistance, support and learning resources for the language and its packages.

-
-
-

Python documentation

+ +
+

Python documentation#

The Python docs can help you understand a number of issues that can be caused by quirks in the language itself, or misunderstandings as to how it behaves.

-
-
-

Python subreddits

+ +
+

Python subreddits#

r/python and r/learnpython are resources you can use to ask about and discuss issues with Python and its packages. The former is aimed more at general Python usage, and the latter more specifically at beginners.

-
-
-
-

Data science/SciPy resources:

-
-

Anaconda help

+ + +
+

Data science/SciPy resources:#

+
+

Anaconda help#

The Anaconda docs site offers free community help and documentation for the Anaconda applications, installing the Anaconda distribution, and using the Conda package and environment manager; along with paid support options.

-
-
-

SciPy.org website

+ +
+

SciPy.org website#

The Scipy website is the the central home of the SciPy stack, with information, documentation, help, and bug tracking for many of the core packages used with Spyder, including NumPy, SciPy, Matplotlib, Pandas, Sympy and IPython.

-
-
-

Project Jupyter

+ +
+

Project Jupyter#

Jupyter is the development hub for IPython, Spyder’s QtConsole, Jupyter notebooks used with the Spyder-Notebook plugin, and more.

-
-
-

Data Science Stack Exchange

+ +
+

Data Science Stack Exchange#

The Data Science site in Stack Exchange can be very useful for questions that relate more to data science than programming specifically.

-
-
-
+ + + -
+ - - - - - + + + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/troubleshooting/common-illnesses.html b/5/troubleshooting/common-illnesses.html index 6b265a3c1..b37bca715 100644 --- a/5/troubleshooting/common-illnesses.html +++ b/5/troubleshooting/common-illnesses.html @@ -1,593 +1,484 @@ - - + + + - + + Common Illnesses — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+ +
+ +
+ + + + +
+
- - - - - - - - +
- - - - - - -
- -
-
-
-

Common Illnesses

+ +
+ +
+

Common Illnesses#

Beyond the general troubleshooting steps, some frequently-reported problems require more specialized solutions.

-
-

Errors starting the kernel

+
+

Errors starting the kernel#

If you receive the message An error occurred while starting the kernel in the IPython Console, Spyder was unable to launch a new Python interpreter in the current working environment to run your code. There are a number of problems that can cause this, but most can be fixed fairly quickly with a few easy steps.

-
-

Spyder-Kernels not installed/incompatible

+
+

Spyder-Kernels not installed/incompatible#

Spyder requires a supported version of the spyder-kernels package to be present in the working environment you want to run your console in.

Kernel version error dialog

It is included by default with Anaconda, but if you want to run your code in another Python environment or installation, you’ll need to make sure it’s installed and updated to the latest version.

Check the required version of spyder-kernels for your version of Spyder in the following table:

- - ---- +
Spyder and Spyder-Kernels version compatibility
+ @@ -632,6 +523,7 @@

Common Illnessesspyder-kernels. If using Anaconda, open a terminal (Anaconda Prompt on Windows) and run:

-
-

Issue with another dependency

+ +
+

Issue with another dependency#

If the kernel displays a long error traceback that mentions other packages like ipython, ipykernel, jupyter_client, traitlets or pyzmq, the problem may be an out of date or incompatible version of a dependency package. To fix this, activate the environment and update the key dependencies.

In an Anaconda environment:

@@ -657,52 +549,54 @@

Issue with another dependency
pip install -U spyder-kernels ipython ipykernel jupyter_client jupyter_core pyzmq traitlets
 

-
-
-

AttributeError/ImportError

+ +
+

AttributeError/ImportError#

Check the last few lines of the error message, and see if its an AttributeError or ImportError, or refers to a file you created in your current working directory or your home folder (C:/Users/YOUR_USERNAME on Windows, /Users/YOUR_USERNAME on macOS, or /home/YOUR_USERNAME on Linux).

Spyder's AtributeError dialog

If so, the the error is likely due to your file being named the same as a Python standard library module, such as string.py or time.py, which overrides the built-in module that Spyder-Kernels is trying to load. To fix this, simply rename your file to something other than one of these names, and try restarting the kernel. To check the names of these modules, see the list in the Python standard library documentation.

-
- -
-

Completion/help not working

+ + +
+

Completion/help not working#

To provide code completions, help and real-time analysis in the Editor, Spyder uses the Python Language Server (PyLS), an implementation of the Language Server Protocol specification used by VSCode, Atom and other popular editors/IDEs. Most help and completion issues lie outside of Spyder’s control, and are either limitations with PyLS or the code that is being introspected, but some can be worked around.

-
-

Object missing docstring

+
+

Object missing docstring#

If nothing is displayed in the calltip, hover hint or help pane, the object you’re trying to introspect may not have a docstring.

-Docstring not found in help pane +Docstring not found in help pane +

In this case, the only solution is to add one in the source code of the original function, method or class.

-
-
-

Object cannot be found

+
+
+

Object cannot be found#

Some objects, whether due to being written in C, Cython or another language; generated dynamically at runtime; or being a method of an object you create, cannot be easily found without executing the code.

-Object not found in help pane +Object not found in help pane +

However, once you run your code in the IPython Console, you might be able to get help and completions on the object there.

-
-
-

LSP has stopped working

+ +
+

LSP has stopped working#

Occasionally, especially after using Spyder for a while, code completion, help and analysis may stop working. If this is the case, you can check LSP status with the LSP Python item in Spyder’s status bar at the bottom of the screen, and restart it by right-clicking it and selecting the Restart Python Language Server item.

Spyder with LSP restart dialog -
-
-

Spyder bug/dependency issue

+ +
+

Spyder bug/dependency issue#

Given the variety of dependencies involved in making LSP work, an incompatible or out of date version in your environment can result in error messages, incomplete results, or help/analysis not working at all.

To address this, first try updating Anaconda and Spyder as described in Basic First Aid. If the issue still isn’t resolved, update the various relevant dependencies with:

conda update python-language-server
 
-
- -
-

Plugin Problems

-
-

Plugin does not work at all

+ + +
+

Plugin Problems#

+
+

Plugin does not work at all#

If you have installed a Spyder plugin, but you can’t see it, go to the Panes submenu of the View menu and select the plugin’s name, which should make its pane visible. If you don’t see the plugin there, select the Dependencies item under the Help menu and see if the plugin appears at the bottom.

Dependencies dialog showing Unittest plugin @@ -710,264 +604,146 @@

Plugin does not work at allimport spyder_unittest to test the Spyder-Unittest` plug-in; this command should run without errors.

If none of this helps you to resolve the problem, then continue to the next section.

-

-
-

Other issues

+ +
+

Other issues#

If you get an error which mentions or involves a Spyder plugin, such as spyder-unittest, spyder-terminal or spyder-notebook, or if you encounter any other problem with a Spyder plugin, then the first approach should be to update Spyder and the plugin to their latest versions.

If this doesn’t fix the problem, you should check the plugin’s website or repository to see if it is compatible with your version of Spyder.

Finally, if compatibility doesn’t seem to be the problem, please check those repositories to see if an issue was already opened, and report it there if not.

-
-
- + + + - + - - - - - - - - - - - Open chat - +
+
+ +
-
-
- Connect with us on: - - - GitHub - - - | - - Twitter - - - | - - Facebook - - - | - - YouTube - - - | - - Instagram - - - | - - Google Groups - -
-
-
- - -
- © 2009-2024 Spyder Doc Contributors | MIT License -
- -
- - Powered by Sphinx 3.5.4 - - - | - Page source - -
-
-
-
+ + + + + + + +
+ + +
\ No newline at end of file diff --git a/5/troubleshooting/emergency-cpr.html b/5/troubleshooting/emergency-cpr.html index 532161cbc..a525bc1c3 100644 --- a/5/troubleshooting/emergency-cpr.html +++ b/5/troubleshooting/emergency-cpr.html @@ -1,580 +1,475 @@ - - + + + - + + Emergency CPR — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+ +
+ +
+ + + + +
+
- - - - - - - - +
- - - - - -
- -
-
-
-

Emergency CPR

+ +
+ +
+

Emergency CPR#

Is Spyder not launching at all? The steps on this section should hopefully get it back up and running in no time.

-
-

Common solutions

+
+

Common solutions#

  1. Try Basic First Aid first, which usually resolves most Spyder install-related issues.

  2. Make sure Spyder isn’t already running and no Spyder related windows (e.g. Variable Explorer dialogs) are left open, and check that the preference setting Application ‣ Advanced Settings ‣ Use a single instance isn’t checked.

    @@ -587,9 +482,9 @@

    Common solutions -

    Advanced tricks

    +

+
+

Advanced tricks#

If none of the above solves the problem, you can try starting Spyder directly from its Python source files which may either get it running, or at least provide useful information to help debug the issue further.

This technique consists of starting Spyder from your terminal (or Anaconda Prompt on Windows) by manually running the Spyder startup routine ( start.py ) with a known good Python interpreter, and observing the results.

To do so, you’ll need to:

@@ -626,165 +521,123 @@

Advanced tricksSubmit a Report section.

-

-
+ + -
+ - -
- -
- -
- - - - -
- -
-
-
-
- - - +
+ + +
+
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/troubleshooting/first-steps.html b/5/troubleshooting/first-steps.html index be99f8301..b21a8c509 100644 --- a/5/troubleshooting/first-steps.html +++ b/5/troubleshooting/first-steps.html @@ -1,579 +1,474 @@ - - + + + - + + First Steps — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+ +
+ +
+ + + + +
+
- - - - - - - - +
- - - - - -
- -
-
-
-

First Steps

+ +
+ +
+

First Steps#

If Spyder crashes or you receive an error message, please read the following troubleshooting steps before opening a new issue. There’s a good chance that someone else has already experienced the same problem, so checking for an existing solution will likely get Spyder working again for you as quickly as possible.

-
+

Important

To make sure you’re getting the most relevant help for your problem, please make sure the issue is actually related to Spyder:

    @@ -587,163 +482,130 @@

    Topics

    To view it, simply click Show details in the Spyder error dialog.

    Spyder showing view internal console option

    Often, that alone will tell you how to fix the problem on your own, but if not, we’re here to help.

    -
    -

    Where to go from here

    +
    +

    Where to go from here#

    If you check out our list of issue categories and problem descriptions and see a question, error message or traceback that looks familiar, the relevant sub-section will likely be of the most specific help solving your issue as quickly as possible.

    As a first step to solving your issue, you can try some Basic First Aid.

    If Spyder won’t launch, check the Emergency CPR section and see if that clears it up.

    If your problem is related to the kernel not starting, autocompletion or a plugin go to Common Illnesses section.

    If you still can’t get it to work, and the problem is indeed Spyder-related, you should consult the the Calling for Help section for other resources to explore.

    Finally, if you couldn’t solve your problem and want to submit an issue to our Github issue tracker, so the bug can hopefully be fixed for everyone, Submit a Report.

    -
    -
+
+ -
+ - -
- - -
+
+ + +
+
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/troubleshooting/index.html b/5/troubleshooting/index.html index ae2ce0a24..ef58266ab 100644 --- a/5/troubleshooting/index.html +++ b/5/troubleshooting/index.html @@ -1,576 +1,468 @@ - - + + + - + + Troubleshooting — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+
+ +
+ + + + + +
+
- - - - - - - - +
- - - - - - -
- -
-
-
-

Troubleshooting

+ +
- - -
-
+
+ + + +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/5/troubleshooting/submit-a-report.html b/5/troubleshooting/submit-a-report.html index 707f46f14..356c83d4a 100644 --- a/5/troubleshooting/submit-a-report.html +++ b/5/troubleshooting/submit-a-report.html @@ -1,593 +1,488 @@ - - + + + - + + Submit a Report — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + - - + + + + +
+ + - - - - - + + + + + + + +
+
+
+ + + + Ctrl+K +
+
+ +
+ +
+ + + + +
+
- - - - - - - - +
- - - - - -
- -
-
-
-

Submit a Report

+ +
+ +
+

Submit a Report#

If you can’t fix your issue with any of the troubleshooting steps, then you’ll want to submit it to our issue tracker so our team can take a look at it for you. You’ll need a Github account to do this, so make sure you have one before you begin (a good idea anyway).

Github page on Spyder's issue tracker -
+

Important

Before you submit an issue, make sure you’ve searched a description of the problem and a relevant portion of the error traceback, on both Google and Spyder’s issue tracker to make sure it hasn’t been submitted before. If that’s the case, your issue will be closed as a duplicate.

-
-

Ways to submit an issue

+
+

Ways to submit an issue#

There are several ways to submit an issue, either from Spyder or GitHub directly. In order of preference and difficulty:

  1. If Spyder presents an error dialog you can submit an issue directly from it. You will have to fill out a title for your issue, specify the steps that lead to this problem and click submit to Github. This will prefill an error report with your environment details, key versions and dependencies and automatically insert the error/traceback for you.

    -Github page on Spyder's issue tracker +Github page on Spyder's issue tracker +
  2. If Spyder opens and your issue does not involve an error dialog, the best way to do so is to simply select Report issue from the Help menu, which manually brings up the issue report form and fills in the key information about your Spyder installation. Describe the issue you’re experiencing (including any error/traceback information) along with a descriptive title, and click Submit to Github.

    @@ -599,9 +494,9 @@

    Ways to submit an issue

Once you submit your report, our team will try to get back to you as soon as possible, often within 24 hours or less, to try to help you fix it.

-
-
+
+

What to include in your report#

Please include as much as possible of the following in your report to maximize your chances of getting relevant help and our ability to diagnose, reproduce and solve your issue.

The key items, in order of priority:

-
+

Note

If you are reporting a specific behavior rather than an error, or the message does not fully explain what occurs, please describe in detail what actually happened, and what you expected Spyder to do.

@@ -621,14 +516,15 @@

What to include in your reportAbout Spyder in the Help menu; along with its key dependencies, shown in the dialog under Help ‣ Dependencies (there’s a button to copy-paste them).

Spyder showing Spyder's info and dependencies

If Spyder won’t launch, paste the output of conda list from your command line (or Anaconda prompt on Windows) in the Dependencies section of the issue template.

-
Command line showing output of conda list +Command line showing output of conda list +
  • How you installed Spyder and any other relevant packages, e.g. Anaconda, MacPorts or pip and whether Spyder has worked before since you installed it.

  • What else you’ve tried to fix it, e.g. from this guide or elsewhere on the web, and if you’ve tried to reproduce it in standalone QtConsole, IPython, and/or the plain Python interpreter.

  • Whether the problem occurred consistently before in similar situations or if this is the first time you’ve observed it.

  • Anything else special or unusual about your system, environment, packages, or specific usage that might have anything to do with the problem

  • -
    +

    Tip

    If including block(s) of code in your report, be sure to precede and follow it with a line of three backticks ``` to get a code block like this:

    print("Your Code Here!")
    @@ -636,165 +532,114 @@ 

    What to include in your report Calling for Help - Workshops - -

    -

    - - -
    - - - - - - Open chat - +
    +
    + +
    -
    -
    - Connect with us on: - - - GitHub - - - | - - Twitter - - - | - - Facebook - - - | - - YouTube - - - | - - Instagram - - - | - - Google Groups - -
    -
    -
    - - -
    - © 2009-2024 Spyder Doc Contributors | MIT License -
    - -
    - - Powered by Sphinx 3.5.4 - - - | - Page source - -
    -
    -
    -
    + +
    + + + + + + +
    + + +
    \ No newline at end of file diff --git a/5/videos/first-steps-with-spyder.html b/5/videos/first-steps-with-spyder.html index 3e28b93de..18d0ce4e1 100644 --- a/5/videos/first-steps-with-spyder.html +++ b/5/videos/first-steps-with-spyder.html @@ -1,580 +1,471 @@ - - + + + - + + First Steps with Spyder — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    + +
    + +
    + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    First Steps with Spyder

    + +
    + +
    +

    First Steps with Spyder#

    The videos in this section provide a starting point for new users who have never opened Spyder before. You’ll get familiar with opening Spyder in different ways, working with the four main panes and customizing the Spyder to your heart’s content.

    -
    -

    Getting started

    +
    +

    Getting started#

    Discover the basics of using the Spyder interface and get an introduction to its four main panes, along with a quick look at the others.

    • Find out different ways to open Spyder

    • @@ -582,32 +473,32 @@

      Getting started

    +
    +

    Learning the basics#

    Learn the basics of using Spyder’s four main panes.

    • Open and edit a file in Spyder’s Editor

    • @@ -617,25 +508,25 @@

      Learning the basics

    +
    +

    Customization#

    Learn how to customize Spyder’s interface to match your workflow and development style.

    • Choose your preferred fonts

    • @@ -643,192 +534,143 @@

      Customization

    + + -
    + - - - -
    - - -
    - +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/5/videos/index.html b/5/videos/index.html index 6d21da76e..0e600b412 100644 --- a/5/videos/index.html +++ b/5/videos/index.html @@ -1,576 +1,464 @@ - - + + + - - Intro Videos — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + Tutorials — Spyder 5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - - -
    - -
    -
    -
    -

    Intro Videos

    + +
    - - -
    -
    +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/5/videos/working-with-spyder.html b/5/videos/working-with-spyder.html index 970e4a4ab..d4a46d347 100644 --- a/5/videos/working-with-spyder.html +++ b/5/videos/working-with-spyder.html @@ -1,579 +1,470 @@ - - + + + - + + Working with Spyder — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    + +
    + +
    + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Working with Spyder

    + +
    + +
    +

    Working with Spyder#

    In this section, you will learn about Spyder’s more advanced functionality, and explore most of the panes.

    -
    -

    Beyond the main panes

    +
    +

    Beyond the main panes#

    Explore how to take advantage of Spyder’s functionality beyond just the four core panes.

    -
    +
    +

    Improving your code quality#

    Learn how to improve the quality of your programs using code analysis.

    • Open and use Code Analysis to evaluate the quality and style of Python files

    • @@ -612,43 +503,43 @@

      Improving your code quality

    +
    +

    Optimizing your code#

    Learn how to optimize your code using the Profiler.

    -
    + + -
    + - -
    - - -
    +
    + + +
    +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/5/workshops/financial.html b/5/workshops/financial.html index bd61da192..12f7b77c7 100644 --- a/5/workshops/financial.html +++ b/5/workshops/financial.html @@ -1,582 +1,475 @@ - - + + + - + + Financial Data Analysis with Spyder — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    + +
    + +
    + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Financial Data Analysis with Spyder

    + +
    + +
    +

    Financial Data Analysis with Spyder#

    By the end of this workshop participants will be able to use Spyder effectively for applying some normative financial theories and models to assemble a portfolio of assets in a way that maximizes the expected return for a given level of risk. In this way, statistically-based tools are used to construct investment portfolios.

    -
    -

    Prerequisites

    +
    +

    Prerequisites#

    To follow this workshop we recommend that you have a intermediate knowledge of Python. You can visit The Python Tutorial to learn the basics of this programming language or to refresh your knowledge of Python.

    You will also need to have Anaconda (or Miniconda) and Spyder installed. More information about Spyder installation in installation guide.

    -
    +

    Important

    Spyder now offers Standalone installers for Windows and macOS, making it easier to get up and running with the application without having to download Anaconda or manually install it in your existing environment. While we still support Anaconda, we recommend this install method on those platforms to avoid most problems with package conflicts and other issues.

    @@ -587,24 +480,24 @@

    Prerequisites -

    Learning goals

    +

    +
    +

    Learning goals#

    After completing this workshop, you should be able to:

    • Apply elementary statistical analysis to stock and cryptocurrency portfolios to measure their performance

    • Understand the advantages of programming with an IDE, such as inspecting variables using the Variable Explorer and interacting with plots leveraging the Plots Pane.

    -
    -
    -

    Learner profile

    +
    +
    +

    Learner profile#

    This workshop is intended for people interested in finance who want to take their first steps in Financial Analysis using Python and Spyder.

    -
    -
    -

    Intro

    + +
    +

    Intro#

    In this workshop we will obtain financial data in real-time from Yahoo! Finance API and explore financial portfolios using Econometrics and computational tools.

    -
    -

    Why use Python for financial analysis?

    +
    +

    Why use Python for financial analysis?#

    Real-time analysis of historical and current financial data is essential for those investing in financial instruments. Python has a number of features that make it ideal for financial tasks:

    • It is easy to learn for anyone, whether they have previous programming experience or not

    • @@ -614,51 +507,51 @@

      Why use Python for financial analysis?Google Colab or Binder to do your analysis in the cloud.

    -
    -
    -

    Why should I use an IDE?

    +
    +
    +

    Why should I use an IDE?#

    Although you can use Python without an IDE (Integrated Development Environment), you will work much better with one. Spyder is a Scientific Integrated Development Environment written in Python, and designed by and for scientists, engineers, and data analysts. Spyder’s capabilities and its integration with Python make it perfect for financial analysis.

    -
    -
    -

    Introduction to financial analysis with Spyder

    + +
    +

    Introduction to financial analysis with Spyder#

    If you’re not familiar with Spyder, we recommend you start with our Quickstart. But if you want a summary, here’s a quick overview.

    -
    +

    Note

    If you already have experience with Spyder, you can skip this section.

    -
    -

    Editor

    +
    +

    Editor#

    The Editor is the place where you write your code and save it as a file (script). It allows you to easily persist your work. This is where you write the code you want to keep from the data analysis you do in IPython Console. Here you will also be able to read, edit and run the code from this workshop.

    -
    -
    -

    IPython Console

    +
    +
    +

    IPython Console#

    The IPython Console is the Spyder’s component where you write chunks of code that you want to experiment with. In this workshop, we are going to give you pieces of code that you can copy and run in this console.

    In essence, the IPython Console allows you to execute commands and interact with data using Python.

    -
    -
    -

    Variable Explorer

    + +
    +

    Variable Explorer#

    The Variable Explorer is one of Spyder’s best features. It allows you to interactively browse and manage the objects generated in the code of the currently selected IPython Console session.

    The Variable Explorer is one of the most frequently used components in this workshop. This is the pane where we will observe the data and most of the results of the analysis, except for the plots.

    -
    -
    -

    Plots pane

    + +
    +

    Plots pane#

    The Plots pane shows all the static graphs and images created in your IPython Console session. All plots generated by the code will appear in this component. This pane also allows you to save each graphic in a local file or copy it to the clipboard to share it with other people.

    -
    -
    -
    -
    -

    Preparation work

    + + + +
    +

    Preparation work#

    Before starting, you must have installed some packages and libraries needed to run the code. We recommend you to install these requirements in a virtual environment. Here we explain step by step how to do it.

    -
    -

    Set up Conda environment

    +
    +

    Set up Conda environment#

    If you would like to have Spyder in a dedicated environment to update it separately from your other packages and avoid any conflicts, you can.

    You can set up your environment in two different ways.

    -
    +

    Important

    We recommend creating the virtual environment with Anaconda (or Miniconda) as it integrates seamlessly with Spyder. You can find installation instructions in Anaconda documentation.

    -
    -

    With commands

    +
    +

    With commands#

    Just run the following command in your Anaconda Prompt (Windows) or terminal (other platforms), to create a new environment called financial-analysis:

    $ conda create -n financial-analysis
     
    @@ -670,31 +563,31 @@

    With commands pip install Historic-Crypto

    -
    +

    Important

    Spyder now offers Standalone installers for Windows and macOS, making it easier to get up and running with the application without having to download Anaconda or manually install it in your existing environment.

    -
    -
    -
    -

    Download the datasets

    +
    +
    +
    +

    Download the datasets#

    Although during the workshop we will explain how to use some APIs to download up-to-date data, you can also download the datasets in csv format from this link.

    To follow this workshop you do not need to create a new directory. However, if you have downloaded the data and want to use it instead of the APIs, you must set the directory that has the downloaded data as the working directory. In order to do this, check that the working directory is correct. You should see in the upper right corner the path to the directory where you have the downloaded data. Something like this:

    Spyder's Working Directory plugin showing the working directory downloaded-data-dir -
    -
    -

    Setting up the virtual environment in Spyder

    + +
    +

    Setting up the virtual environment in Spyder#

    Let’s check that the virtual environment we created is enabled in Spyder. Go to Preferences > Python interpreter, and use the dropdown below Use the following Python interpreter to choose your virtual environment. You should see something like this:

    Screenshot on how to set up environment in Spyder's Preferences

    Now, you have everything ready to proceed with the workshop.

    -
    -
    -

    Download the code

    + +
    +

    Download the code#

    Although the workshop is designed for you to write the code in the IPython Console, we have created a file that you can download here. This script provides all the code you will write in this workshop, and you can use it as a guide if you get lost.

    -
    -
    -
    -

    Obtain financial data

    + + +
    +

    Obtain financial data#

    When it comes to finance, being up to date is very important. So we are going to use a Python library that allows us to get updated historical Stock Market records from Yahoo! Finance API. In this way, we will be able to download data in the period of time we are interested in analyzing.

    Remember to type and run all code for this workshop in the “IPython Console” at the bottom right of Spyder.

    Screenshot IPython Console location in Spyder IDE @@ -719,8 +612,8 @@

    Obtain financial data

    We have used the Ticker class of the yfinance library to create a netflix object. This object contains attributes and methods that we can query to obtain various types of information.

    -
    -

    General stock information

    +
    +

    General stock information#

    If you want to know which methods and attributes you can query, you can do so with the built-in help() function.

    You can also type the name of the object (netflix) in the console, then type a period and hit the Tab key once. IPython suggestions will then appear to help you navigate the object:

    IPython Console auto-suggestions @@ -738,9 +631,9 @@

    General stock information

    Although pprint displays all the information, it is easier to view it in the Variable Explorer.

    -

    - -
    -

    First portfolio

    + + +
    +

    First portfolio#

    Let’s build our first stock investment portfolio! Say we are interested in investing in technology, and we want to know what performance can be obtained by putting money into some of the “heavyweights” in this industry.

    To measure the performance of our first portfolio we are going to use a classic theory in the world of finance: mean-variance portfolio (MVP) theory. This model assumes that investors only care about expected returns and the variance of such returns. The analysis is based entirely on statistical measures based on a time series of share prices, such as periodic mean returns and the variances of those returns with the same periodicity.

    - -
    +
    +

    A first glance at the portfolio#

    We want to see how our portfolio would have performed if we had invested in it from 2012 to early 2021. How could we obtain this measurement? Let’s look at the monthly closing prices of each stock. To do this we will do an automatic resample of the data. And then we will calculate the change in relative frequencies (percentages).

    The resampling will be performed with the resample("M") method and the calculation of percentages with the pct_change() method. The result will be stored in the monthly_data_1 variable.

    monthly_data_1 = close_data_1.resample("M").ffill().pct_change()
    @@ -808,7 +701,7 @@ 

    A first glance at the portfolio# dtype: float64

    -
    +
    +

    Returns and volatility#

    Remember that in the mean-variance portfolio theory what matters are the expected returns and variances. To calculate these returns, we will divide the price of the stock on one day by the price of the same stock on the previous day. We will do this by dividing the close_data_1 DataFrame by a version of itself in which we shift each record one date backwards (shift(1)). For example, if on the date 2012-01-03 a stock was valued at 1, and on the next day (2012-01-02), it was valued at 2, then in our shifted dataset, on the day 2012-01-03 the stock would be worth 1. In this way, we would divide 1 by 2. And so on with all the values of all the shares. We will also normalize the results by passing them to a logarithmic scale with np.log().

    -

    If high return is desirable, high volatility is undesirable. The risk of this portfolio is relatively large.

    -
    -
    -

    Sharpe ratio

    + +
    +

    Sharpe ratio#

    The Sharpe ratio or index is a measure of portfolio performance. It relates the portfolio’s return to its volatility, comparing the expected/realized return with the expected/realized risk. It is calculated as the difference between the actual investment returns and the expected return in a zero-risk situation, divided by the volatility of the investment. It provides a model of the additional amount of returns received for each additional unit of risk.

    Let’s formalize this in a function:

    def portfolio_sharpe(returns, weights):
    @@ -901,7 +794,7 @@ 

    Sharpe ratio# 1.2061518063427656

    -
    -
    +

    Warning

    You do not need to type the following code in the IPython Console. If you write the function above it will be enough. It is just a code presentation to explain what is inside the function.

    -
    -

    monte_carlo_sharpe function explained

    +
    +

    monte_carlo_sharpe function explained#

    Let’s now break the function down to understand what is happening. First, we create a numpy array of length 1,000 and width of the number of shares in the portfolio. Each row of the array has random weights that always add up to 1:

    sim_weights = np.random.random((1000, len(symbols)))
     sim_weights = (sim_weights.T / sim_weights.sum(axis=1)).T
    @@ -940,15 +833,15 @@ 

    monte_carlo_sha
    sharpe_ratio = volat_ret[:, 1] / volat_ret[:, 0]
     
    -

    -
    -

    Using the monte_carlo_sharpe function

    +
    +
    +

    Using the monte_carlo_sharpe function#

    We use the function to get the simulated returns and volatility of portfolio 1 (port_1_vr) and the related Sharpe ratios (port_1_sr).

    Enter the following code in the console.

    port_1_vr, port_1_sr = monte_carlo_sharpe(rets_1, SYMBOLS_1, weights_1)
     
    -
    +

    Note

    Remember that the weights are initialized randomly, so each time you run this code you will get different results.

    @@ -966,10 +859,10 @@

    Using the monte Portfolio 1 Monte Carlo Sharpe simulation scatter plot

    A roughly linear relationship can be observed between returns and volatility: the higher the volatility, the higher the gains. And the Sharpe ratio shows an important amount of variability (it is noticeable in the “width” of the line drawn).

    This seems to be a good portfolio because it has a good performance with a not very large variance.

    -

    -
    -
    -

    Optimal portfolio weights

    + + +
    +

    Optimal portfolio weights#

    Can we use the data obtained to calculate the optimal weights for the portfolio by year? Of course we can. Let’s start by delimiting the previous years as variables.

    -
    +
    +

    Comparison of expected and realized returns#

    Finally, we will use the optimal weights to calculate the expected returns and compare them with the actual returns.

    def exp_real_rets(returns, opt_weights, symbols, start_year, end_year):
     
    @@ -1050,13 +943,13 @@ 

    Comparison of expected and realized returns -

    Second portfolio

    +

    + +
    +

    Second portfolio#

    We are now going to apply all the previous code with a portfolio of a different nature. Let’s assume that instead of technology companies, we are now interested in pharmaceuticals. We will build a portfolio with stocks of Pfizer, Astra Zeneca, Johnson & Johnson.

    -
    -

    Download the data

    +
    +

    Download the data#

    Let’s download the data and format it.

    SYMBOLS_2 = ["PFE", "AZN", "JNJ"]  # Pfizer, Astra Zeneca, Johnson N Johnson
     
    @@ -1066,13 +959,13 @@ 

    Download the dataclose_data_2 = data_2[data_2.Ticker == "Close"].drop("Ticker", inplace=False, axis=1)

    -
    +

    Note

    If you do not want to use the yfinance API, you can download the close_data_2.csv file containing the closing information for this portfolio. Copy this file to your working directory. Load the data with the following instruction: >>> close_data_2 = pd.read_csv("close_data_2.csv").

    -
    -
    +
    +

    Mean and standard deviation#

    We are going to put the data in a monthly format and observe the mean and standard deviation.

    monthly_data_2 = close_data_2.resample("M").ffill().pct_change()
     
    @@ -1094,9 +987,9 @@ 

    Mean and standard deviation -

    Daily and monthly timelines

    +

    +
    +

    Daily and monthly timelines#

    Let’s better visualize the above with a couple of charts.

    +
    +

    Returns, volatility and Sharpe ratio#

    To confirm what was said in the previous section, let’s calculate returns, volatility and Sharpe ratio.

    +
    +

    Optimal pharmaceutical stock weights#

    Let us now see what are the optimal weights for each stock using the optimal_weights function.

    start_year, end_year = (2012, 2020)
     opt_weights_2 = optimal_weights(rets_2, SYMBOLS_2, weights_2, start_year, end_year)
    @@ -1178,14 +1071,14 @@ 

    Optimal pharmaceutical stock weights -

    Third portfolio

    -
    -

    Download cryptocurrencies data

    +

    +
    +
    +

    Third portfolio#

    +
    +

    Download cryptocurrencies data#

    Our third portfolio will consist of three cryptocurrencies: bitcoin (BTC), ethereum (ETH) and litecoin (LTC). To access historical data, we are going to use a library called Historic-Crypto.

    -
    +

    Important

    If you want to make use of the data without the Historic-Crypto library, you can download the dataset “crypto_hist.csv” in your working directory, and load it in memory with the instruction crypto_hist = pd.read_csv("crypto_hist.csv"), and skip to section Monthly data.

    @@ -1198,7 +1091,7 @@

    Download cryptocurrencies data
    crypto_list = Cryptocurrencies(coin_search="", extended_output=True).find_crypto_pairs()
     

    - -
    -

    Monthly data

    +
    +
    +

    Monthly data#

    Let’s take a look at the monthly history of cryptocurrency price growth.

    Portfolio 3 daily stock price

    We can note that the scale here is much larger. And the proportion of ETH growth over the other two coins is quite remarkable.

    -
    -
    -

    Return, volatility and Sharpe ratio

    + +
    +

    Return, volatility and Sharpe ratio#

    Let’s consider the return, volatility and Sharpe ratio of this portfolio.

    +
    +

    Monte carlo simulation#

    The Monte Carlo simulation also shows the non-linear correlation between risk and returns (as you can see, sometimes high risk involves only modest profits):

    Portfolio 3 Monte Carlo Sharpe simulation scatter plot

    As can be seen, there are points (bottom right) that show a very high volatility and yet have a very low expected return. In this sense, portfolio 1 represents a safer investment because the higher risk is consistently offset by higher returns.

    -
    -
    -

    Optimal cryptocurrency weights

    + +
    +

    Optimal cryptocurrency weights#

    Portfolio 3 optimal weights by year

    The optimal portfolio weights, if calculated annually, suggest that our portfolio should have been quite polarized in some years: the recommendation is to have bought only bitcoins before the start of 2016 and 2019, and only ethereum in 2018. Starting 2017 and 2020, on the other hand, our weights recommended a more balanced investment between bitcoin and ethereum. Litecoin is not recommended by our model.

    -
    -
    -

    Expected and realized returns

    + +
    +

    Expected and realized returns#

    Portfolio 3 expected and realized returns comparison

    In this graph we can see that in 2017 and 2020 the earnings obtained would have exceeded the expected earnings (with our calculated weights). In 2019 our model predicted a sharp drop in the portfolio, but in reality the portfolio did not make either annualized gains or losses that year. In contrast, in 2018, our model would have brought us heavy losses, as the value of cryptocurrencies declined sharply that year.

    The mean expected return for our portfolio is 0.6972, which is higher than the realized return of 0.4181 that we would have obtained. Having invested in this portfolio over the long term (from 2016 to the present) would have been a very good deal. Due to the high variability, investing in the short term would have been very risky. In terms of gross profits, the realized returns of this portfolio were more than double those of portfolio 1 (0.4181 > 0.1997).

    -
    -
    -
    -

    Final words

    + + +
    +

    Final words#

    The mean-variance portfolio (MVP) theory is one of the many tools available to financial analysis. In recent years, machine learning algorithms have even been used to predict the behavior of stock prices more accurately than can be achieved with any standard financial theory.

    The examples given during this workshop are not intended to serve as guidelines for you to invest your money. It is only a first step towards learning financial analysis using Python and a scientific IDE.

    In this workshop you have learned how to:

    @@ -1292,13 +1185,13 @@

    Final wordsScientific Computing and Visualization with Spyder.

    -
    -

    Homework

    +
    +

    Homework#

    If you want to check what you have learned, we suggest you try to obtain the results presented for the third portfolio. If you have any questions, you can consult the code that accompanies this workshop in our repository.

    -
    -

    -
    -

    Further reading

    + + +
    +

    Further reading#

    Much of the math used to apply MVP was the mathematics outlined in Yves Hilpisch’s excellent book, which we recommend to you:

    -
    - + + - + - - - -
    - -
    - - - - - -
    -
    - + + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/5/workshops/index.html b/5/workshops/index.html index b072b8912..e7685f198 100644 --- a/5/workshops/index.html +++ b/5/workshops/index.html @@ -1,576 +1,466 @@ - - + + + - + + Workshops — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - - -
    - -
    -
    -
    -

    Workshops

    + +
    - - -
    -
    +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/5/workshops/plugin-development.html b/5/workshops/plugin-development.html index 77caa6de2..6655c9a28 100644 --- a/5/workshops/plugin-development.html +++ b/5/workshops/plugin-development.html @@ -1,582 +1,475 @@ - - + + + - + + Plugin Development with Spyder — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    - - - - - +
    + +
    + + + + +
    +
    - - - - - - - - +
    - - - - - - -
    - -
    -
    -
    -

    Plugin Development with Spyder

    + +
    + +
    +

    Plugin Development with Spyder#

    This workshop reviews the features and possibilities of the API offered by Spyder 5—the recently released version of our favorite IDE for scientific Python—for plugin development and to extend its functionality.

    As a practical exercise, we will develop a simple plugin that incorporates a configurable pomodoro timer in the status bar and some toolbar buttons to interact with it.

    -
    -

    Prerequisites

    +
    +

    Prerequisites#

    You will need to have Spyder installed. Visit our installation guide for more information.

    -
    +

    Important

    Spyder now offers Standalone installers for Windows and macOS, making it easier to get up and running with the application without having to download Anaconda or manually install it in your existing environment. However, readers of this workshop should install Spyder using Anaconda or Miniconda, as standalone installers currently do not allow to add extra packages like the plugin we are going to develop in this workshop.

    @@ -593,9 +486,9 @@

    PrerequisitesGuru99 - PyQt tutorial

  • Python GUIs - PyQt and PySide tutorials

  • -

    -
    -

    Learning Goals

    +
    +
    +

    Learning Goals#

    By the end of this workshop participants will know:

    • The basics to develop plugins for Spyder, and get a general idea of its inner workings.

    • @@ -603,9 +496,9 @@

      Learning Goals -

      Spyder for developers

      +

    +
    +

    Spyder for developers#

    The best place to find information about contributing to Spyder or developing for Spyder is its Github repository, in particular the contribution guide.

    Spyder IDE components.
      @@ -614,53 +507,53 @@

      Spyder for developers

      Spyder uses qtpy which is an abstraction layer that allows you to work with Qt from Python regardless of whether you use either of the two reference libraries: PyQt or PySide.

    • spyder-kernels provide Jupyter kernels to Spyder, for use within its consoles.

    -
    +

    Important

    Spyder is currently developed in such a way that most of its features are implemented as plugins.

    -
    -
    -

    Types of plugins we can develop in Spyder

    +
    +
    +

    Types of plugins we can develop in Spyder#

    Types of Spyder plugins. -
    +

    Note

    A plugin is a component that adds functionality to an application, it can be a graphical component, for example, to display maps, or a non-graphical one that adds additional syntax coloring schemes.

    Formally, plugins are instances of Qt classes that modify the behavior of Spyder. Aside from a few fundamental components, most of Spyder’s functionality arises from the interaction of plugins of two types:

    -
    -

    SpyderDockablePlugin

    +
    +

    SpyderDockablePlugin#

    It is a plugin that works as a QDockWidget, this is a Qt class that provides a graphical control that can be docked inside a QMainWindow or floated as a top-level window on the desktop.

    -
    -
    -

    SpyderPluginV2

    +
    +
    +

    SpyderPluginV2#

    SpyderPluginV2 is a plugin that does not create a new dock widget on Spyder’s main window. In fact, SpyderPluginV2 is the parent class of SpyderDockablePlugin.

    -
    -
    -

    Discovering Spyder plugins

    -
    +
    +
    +

    Discovering Spyder plugins#

    +
    -
    + +
    -
    -
    -
    -

    What will we do?

    + + + +
    +

    What will we do?#

    Our practical work will consist in the implementation of the Pomodoro technique for time management in the Spyder interface.

    Description of the pomodoro technique. -
    +

    Note

    The Pomodoro Technique, designed by Francesco Cirillo, is a time management practice used to increase your focus and productivity when trying to complete assignments or meet deadlines. Choosing to use a Pomodoro Timer can help to give a task your full, undivided attention.

    @@ -675,8 +568,8 @@

    What will we do? -

    Steps

    +
    +

    Steps#

    These are the general steps that we will be following throughout this workshop:

    - -
    +
    +

    Location of Spyder Pomodoro Timer widgets in Spyder.#

    +
    + +
    Spyder Pomodoro Timer in the preferences window. -

    Spyder Pomodoro Timer in the preferences window.

    -
    -

    -
    -

    Features

    +
    +

    Spyder Pomodoro Timer in the preferences window.#

    +
    + +
    +
    +

    Features#

    A minimal planning to organize ideas.

    + +
    +

    Set up a development environment#

    In principle, we could use any Spyder installed within a conda environment according to the instructions given in the installation guide.

    However, if you use a working environment that has other dependencies and you want to keep your plugin development independent of them, it is recommended to create a new environment which only has Spyder with the minimum dependencies needed for your plugin.

    Spyder development environment. @@ -729,7 +626,7 @@

    Set up a development environment mamba install spyder

    -
    +

    Note

    • Anaconda Individual Edition is a Python distribution for data science and machine learning to be used in a single machine.

    • @@ -738,9 +635,9 @@

      Set up a development environmentmamba, is an optimized implementation of conda’s package management features, that resolves dependencies and installs packages much faster than conda.

    -
    -
    -

    Create a repository

    + +
    +

    Create a repository#

    Now that we have our local virtual environment, it is good practice to manage our source code with a version control system, and the most widely used web service for this purpose is currently Github. Here you can find, for example, the Spyder and Python repositories.

    Git and Github repository concepts.

    To create a git repository on Github, we need to follow these steps:

    @@ -753,9 +650,9 @@

    Create a repository$ git clone [repo-link]. You must have git installed and configured on your computer. If you don’t have experience using git we recommend The Carpentries workshop Version control with git.

    A detailed description of repository creation could be found in the official Github documentation, and a hello world tutorial with basic git operations from the Github interface.

    -

    -
    -

    Let’s get started

    + +
    +

    Let’s get started#

    We already have a git repository and a virtual environment where Spyder 5 is installed.

    Let’s activate our environment and go into the local folder of our repository.

    mamba activate spyder-dev
    @@ -763,7 +660,7 @@ 

    Let’s get startedcookiecutter to create the initial structure of our plugin. cookiecutter is a tool made in Python specifically designed to create project templates. -We have developed one of these templates to generate the basic structure of a plugin, it can be found at: https://github.com/spyder-ide/spyder5-plugin-cookiecutter

    +We have developed one of these templates to generate the basic structure of a plugin, it can be found at: spyder-ide/spyder5-plugin-cookiecutter

    Folder structure of our plugin.

    Let’s run cookiecutter to generate our

    $ cookiecutter https://github.com/spyder-ide/spyder5-plugin-cookiecutter
    @@ -791,8 +688,8 @@ 

    Let’s get started from 1, 2, 3, 4, 5, 6 [1]: 1

    -

    +
    +

    Building our first plugin#

    From now on we will be building the plugin step by step. In the spyder pomodoro timer repository you will find the final version of the code for you to take a look at it, in case we are missing any detail.

    -
    -

    Widgets

    +
    +

    Widgets#

    The best way to start building our plugin is by implementing its graphical components first in widgets.py

    Let’s call the initial version, without any editing INITIAL. In INITIAL, widgets.py is as follows:

    @@ -869,7 +766,7 @@

    Widgets_ = get_translation("spyder_pomodoro_timer.spyder")

    - - -
    -

    The container

    + +
    +

    The container#

    The next step in the development of our plugin is to create an instance of the widget we wrote above, so we can add it to Spyder’s status bar. For that, we need to use a container. Due to Qt specifics, we need an instance of QWidget (the container) to be the parent of all other widgets part of our plugin (as mentioned above).

    Thus, the COOKIECUTTER version of container.py is:

    from spyder.api.config.decorators import on_conf_change
    @@ -975,9 +872,9 @@ 

    The containerself.pomodoro_timer_status = PomodoroTimerStatus(self)

    -
    -
    -

    Plugin

    + +
    +

    Plugin#

    Finally, we define our plugin so that it is registered within Spyder. The INITIAL version (i.e. the one created by cookiecutter) for plugin.py is:

    - -
    -

    How to test our plugin

    + + +
    +

    How to test our plugin#

    Now it is time to see how our plugin looks in the Spyder interface.

    From the root folder of our plugin, we activate the environment where Spyder is installed, and run:

    +
    +

    Enhancing our plugin#

    From now on we are going to go into details of how things are implemented in Qt. So in case you have any doubts, the Qt documentation will be your best guide. We created an annex to this workshop that quickly explains way the fundamental concepts of Qt for those in a hurry: Qt Fundamentals

    -
    -

    Timer updates

    +
    +

    Timer updates#

    The first problem with our plugin is that its pomodoro timer is not being updated. To activate it we can use the QTimer in PomodoroTimerStatus, which is present because it’s an instance of BaseTimerStatus.

    The second version where the value in the status bar is updated is called TIMER.

    Let’s go back to widgets.py and add this constant below the import lines (line 22).

    @@ -1163,13 +1060,13 @@

    Timer updatesdisplay_time method that converts the current countdown value, which is measured in milliseconds, into a human-readable format. And update_timer simply keeps updating the countdown until it reaches zero.

    If we run Spyder again we will find that our timer has come to life.

    Timer countdown working. -

    -
    -
    -

    Timer controls

    + + +
    +

    Timer controls#

    Now we need a way to control our timer. We can achieve this by adding some buttons to Spyder’s toolbar, which will be useful to learn how to work with toolbars, menus and actions in Spyder.

    -
    -

    PomodoroTimerToolbar

    +
    +

    PomodoroTimerToolbar#

    The next version where actions are added to the toolbar is called ACTIONS.

    TIMER -> ACTIONS widgets.py diff

    Let’s go back to widgets.py and import the Spyder application toolbar class:

    @@ -1199,9 +1096,9 @@

    PomodoroTimerToolbar...

    - -
    -

    Create the Pomodoro Toolbar

    + +
    +

    Create the Pomodoro Toolbar#

    Now we are going to create a new section in our toolbar and associate some functionality to it by means of actions. This particular information is recommended to be included in the api.py file because this way we can offer endpoints to the rest of Spyder and new plugins for tweaking the behavior of our plugin.

    TIMER -> ACTIONS api.py diff

    Let’s add the following to the end of api.py:

    @@ -1220,9 +1117,9 @@

    Create the Pomodoro Toolbar -

    Add actions to the toolbar

    +

    +
    +

    Add actions to the toolbar#

    TIMER -> ACTIONS container.py diff

    Now let’s go to container.py, where we are going to implement the behavior of our new toolbar and its actions. In this case, we are not going to specify the internal behavior of our plugin, but the relationship between its widgets and other areas of Spyder, so it is more convenient to do it in the container.

    @@ -1338,9 +1235,9 @@

    Add actions to the toolbarpause field of pomodoro_timer_status, and in the case of stop_pomodoro_timer the countdown is restarted.

    -

    -
    -

    Register the toolbar

    + +
    +

    Register the toolbar#

    TIMER -> ACTIONS plugin.py diff

    A final mandatory step is to go to plugin.py and register this new toolbar component.

    To do this, add Plugins.Toolbar to the plugin requirements:

    @@ -1355,9 +1252,9 @@

    Register the toolbartoolbar.add_application_toolbar(container.pomodoro_timer_toolbar)

    - -
    -

    Review the changes

    + +
    +

    Review the changes#

    The first thing we can notice is that we already have the corresponding buttons in the toolbar.

    Pomodoro timer toolbar buttons

    The strings that were entered as the tip parameter in the creation of the actions are shown here as the buttons’ tooltips.

    @@ -1365,13 +1262,13 @@

    Review the changes

    Finally, let’s check how the new Pomodoro Timer control buttons in the toolbar interact with the component in the status bar.

    Interaction between the Pomodoro Timer toolbar and its status bar. -

    - -
    -

    Add a Configuration Page

    + + +
    +

    Add a Configuration Page#

    Another feature of Spyder plugins is that they can have configurable options that appear in Spyder’s Preferences window.

    -
    -

    Configuration defaults

    +
    +

    Configuration defaults#

    The final version in which we add a configurable parameter will be called CONFPAGE.

    The first step is to define what options we want to offer to our users. For this we must create a new file, which we can call conf.py. In this file we will write the following:

    ACTIONS -> CONFPAGE config.py diff

    @@ -1408,9 +1305,9 @@

    Configuration defaults

    Note that we are moving the definition of POMODORO_DEFAULT from widgets.py to conf.py, since we now have a dedicated place for default configuration values.

    - -
    -

    Configuration page

    + +
    +

    Configuration page#

    Now, we need to build the page that will appear in the Preferences window. For this, we edit the confpage.py file generated by cokkiecutter as follows:

    ACTIONS -> CONFPAGE confpage.py diff

    +
    +

    Propagate configuration changes#

    Since we moved all the configuration information to conf.py, now we have to import it from there into widgets.py.

    ACTIONS -> CONFPAGE widgets.py diff

    # Local imports
    @@ -1483,9 +1380,9 @@ 

    Propagate configuration changesself.value = self.display_time()

    -
    -
    -

    Registering preferences

    + +
    +

    Registering preferences#

    Finally, it is necessary to activate the use of preferences in plugin.py, by requiring the Preferences plugin

    ACTIONS -> CONFPAGE plugin.py diff

    -
    + +
    +

    Publishing your plugin#

    Since the recommended way to install Spyder is through conda, the obvious choice would be to publish our plugin through a channel like conda-forge, but this is a task that is beyond the scope of this workshop due to its complexity.

    However, the tools used to publish packages in conda are usually based on the packages published in PyPI. So let’s see how to publish our plugin there.

    Publish your plugin in PyPI. -
    -

    PyPI and TestPyPI

    +
    +

    PyPI and TestPyPI#

    The first thing we have to do is to create an account on the PyPI and TestPyPI websites. Although our package will be finally published in PyPI, it is advisable to use TestPyPI to test that our package can be published properly without generating additional load to the PyPI servers or affecting their logs.

    Next, we need edit the setup.py file at the root of our project with our own data. Fortunately, cookiecutter created one for us.

    To upload our package to PyPI we have to use a tool called Twine that makes this task much easier. And we can install it in our conda environment using:

    $ mamba install twine
     
    -
    -
    -

    Build and check the package

    +
    +
    +

    Build and check the package#

    Before publishing our plugin we must package it. To do it we must write the following from the root folder of our project (where setup.py is placed):

    $ python setup.py sdist bdist_wheel
     
    @@ -1542,9 +1439,9 @@

    Build and check the package dist/spyder-pomodoro-timer-0.0.1.dev0.tar.gz: PASSED

    - -
    -

    Upload to PyPI

    + +
    +

    Upload to PyPI#

    Now we can use twine to upload the distribution packages we have built. First, we will upload them to TestPyPI to make sure everything works:

    $ twine upload --repository-url https://test.pypi.org/legacy/ dist/*
     
    @@ -1577,10 +1474,10 @@

    Upload to PyPI
    $ pip install spyder-pomodoro-timer
     

    -
    - -
    -

    Final words

    + + +
    +

    Final words#

    The possibility of making a tool extensible through plugins, extensions or addons, as they are usually called, is a fundamental feature that allows taking advantage of the talent of third-party developers to respond to needs and enhancements that are beyond the scope of the application’s core development team.

    Similarly, a plugin-based system makes the application much easier to maintain. Eventually, the ability to enable and disable plugins makes it more adaptable to different use cases. For instance, at present it would be inconceivable to think of a web browser that does not have extensions to block advertising or organize links, even if those features don’t come by default on them.

    In Spyder we have put special interest in consolidating an API that allows the development of plugins in a consistent way. The main focus of the development effort between versions 4 and 5 was in this direction and we are at a key moment where we expect to capitalize on all this work.

    @@ -1604,506 +1501,187 @@

    Final wordsSpyder-IDE Github organization space.

    If you are interested in an introduction to scientific computing with Spyder, you can visit the workshop Scientific Computing and Visualization with Spyder.

    If you are interested in an introduction to financial analysis with Spyder, you can visit the workshop Financial Data Analysis with Spyder.

    -
    -

    Homework

    +
    +

    Homework#

    As you may have noticed, there were some features left to implement such as notifications when pomodoros are completed. Try to implement them and do not hesitate to contact us if you have any doubts.

    -
    -

    -
    -

    Further reading

    + + +
    +

    Further reading#

    In the plugin-examples repository you can find additional examples that will surely be useful for you to further understand Spyder plugin development.

    A more in-depth review of the Spyder repository itself, especially its simpler plugins, such as History, Plots or Working directory, may help you understand it better. As well as a review of the various helper functions, widgets and mixins present in spyder.api.

    -
    - + + - + - - - -
    - -
    - - - - - -
    -
    - + + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/5/workshops/qt_fundamentals.html b/5/workshops/qt_fundamentals.html index 91171ec93..c2e24ba9d 100644 --- a/5/workshops/qt_fundamentals.html +++ b/5/workshops/qt_fundamentals.html @@ -1,579 +1,472 @@ - - + + + - + + Qt Fundamentals — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - - - - - +
    - - - - - - -
    - -
    -
    -
    -

    Qt Fundamentals

    + +
    + +
    +

    Qt Fundamentals#

    Qt is a multiplatform widget toolkit for creating native graphical user interfaces. Qt is also a very complete development framework that offers utilities for building applications, and libraries of extensions for Networking, Bluetooth, Charts, 3D rendering, Navigation (as GPS), among others.

    -
    -

    Basic Qt Components

    +
    +

    Basic Qt Components#

    As mentioned before, Spyder’s plugin development consists of extending the functionality of its Qt-based graphical interface.

    To develop a GUI we will add graphical elements of interaction known as widgets, arrange them using layouts. Then, we interconnect those widgets using customized procedures implemented as functions or methods, allowing to trigger behavior from user interaction. In the following, we will develop these ideas in more detail.

    Each type of Qt component is a class starting with the letter Q followed by a name related to its functionality.

    @@ -584,255 +477,171 @@

    Basic Qt ComponentsQMainWindow is a pre-built widget that provides many standard window features as toolbars, menus, a status bar, dockable widgets and more, which serves as the basis for the application.

    -
    -

    Signals & Slots

    +
    +

    Signals & Slots#

    Signals are notifications emitted by widgets when something happens. That something could be different things, from pressing a button, to changing text in an input box, to changing text in the window. Many signals are initiated by user action, but this is not a rule.

    Slots are signal receivers. Functions or methods could be used as slots, by connecting a signal to them. If a signal sends data, the receiver callable will also receive it. Many Qt widgets also have their own built-in slots, so the corresponding widgets are notified automatically.

    -
    -
    -

    Widgets

    +

    +
    +

    Widgets#

    In computer science a Widget is a shortened form of “window gadget”. A widget is an element of interaction, such as a button, or a container for other widgets, as panels or tabs. The QWidget class is the fundamental class for creating interfaces in Qt, it receives events from the window system, and renders its representation on the screen. A widget can provide a container for grouping other widgets, and if it is not embedded in a parent widget, it becomes a window.

    -
    -
    -

    Layouts

    +
    +
    +

    Layouts#

    Interfaces are built by embedding widgets inside widgets, and since they are visual components they are visually organized by means of layouts. A layout indicates how the widgets fill their container, either as columns, rows, cells in a matrix or stacked so that only one is visible at a time. Those are the 4 basic layouts available in Qt: QHBoxLayout, QVBoxLayout, QGridLayout, and QStackedLayout.

    -
    -
    -

    Actions, Toolbars & Menus

    + +
    +

    Actions, Toolbars & Menus#

    User interfaces of desktop applications usually use QToolbar and QMenu. Since these are alternative ways to access the same functionality, Qt provides QAction as a way to avoid duplication of functions. Thus, each time a menu option or a toolbar button gives access to the same function, they point to the same action.

    -
    -
    -

    Dialogs

    + +
    +

    Dialogs#

    A Dialog is a GUI component that communicates with the user. Dialogs are commonly used for functions that do not fit into the main interface. In Qt, by design QDialog is a modal (or blocking) window that show in front of the main Window until it is dismissed.

    Qt provides some special dialogs for the most common use-cases as file Open/Save, font selection, error messages, color choosing, printing, among others.

    -
    -
    -

    Windows

    + +
    +

    Windows#

    If an application requires additional windows that do not block the main window, these are generated as non-parent QWidget instances. These are used for tasks that happen in parallel over long-running processes such as displaying graphs or document editing.

    -
    -
    -

    Events

    + +
    +

    Events#

    An Event denote every interaction the user has with a Qt application. There are several types of events designed to address different types of interactions. In Qt they are represented by QEvent instances that contain information about what prompted them, and are passed to specific handlers that are responsible for triggering further actions.

    -
    -
    -
    + + + -
    + - - - - - +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/5/workshops/scientific-computing.html b/5/workshops/scientific-computing.html index 55fd22dc3..21ebde502 100644 --- a/5/workshops/scientific-computing.html +++ b/5/workshops/scientific-computing.html @@ -1,581 +1,474 @@ - - + + + - + + Scientific Computing and Visualization with Spyder — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Scientific Computing and Visualization with Spyder

    + +
    + +
    +

    Scientific Computing and Visualization with Spyder#

    This workshop allows you to explore some of Spyder’s features that make Spyder an ideal IDE for using the scientific tools offered by Python. Throughout the workshop, we will apply the scientific method to answer some questions related to our preferences and cognitive abilities. By the end of this workshop participants will be able to use Spyder to explore data, analyze it with some statistical tools and plot the relationship between variables.

    -
    -

    Prerequisites

    +
    +

    Prerequisites#

    You will need to have Spyder installed. Visit our installation guide for more information.

    -
    +

    Important

    Spyder now offers Standalone installers for Windows and macOS, making it easier to get up and running with the application without having to download Anaconda or manually install it in your existing environment. While we still support Anaconda, we recommend this install method on those platforms to avoid most problems with package conflicts and other issues.

    @@ -585,24 +478,24 @@

    PrerequisitesThe Python Tutorial to learn the basics of this programming language.

  • Some knowledge of Statistics (hypothesis testing , ANOVA, p-value)

  • -

    -
    -

    Learning goals

    +
    +
    +

    Learning goals#

    After completing this workshop, you should be able to:

    • Apply the scientific method to answer questions related to psychometric variables

    • Understand how to use Spyder’s built-in scientific computing tools

    -
    -
    -

    Learner profile

    +
    +
    +

    Learner profile#

    This workshop is intended for people who want to learn how to answer questions scientifically from a dataset. We have also designed it to serve as a tutorial for learning how to use Spyder as a research tool.

    -
    -
    -

    Intro

    + +
    +

    Intro#

    In this workshop we will explore a data set and use it to answer some questions using the scientific method.

    -
    -

    Why do scientific research with Python?

    +
    +

    Why do scientific research with Python?#

    Python is a mature programming language that has been chosen by much of the scientific community to support the research process. There are a few reasons for this:

    • It is versatile and easy to learn and use

    • @@ -613,13 +506,13 @@

      Why do scientific research with Python?Jupyter Notebooks and implementations of these in the cloud (Google Colab or Binder)

    -
    -
    -

    How can Spyder help me in my scientific research?

    +
    +
    +

    How can Spyder help me in my scientific research?#

    Spyder is a Scientific Integrated Development Environment written in Python, and designed by and for scientists, engineers, and data analysts. It features a unique combination of the advanced editing, analysis, debugging, and profiling functionality of a comprehensive development tool with the data exploration, interactive execution, deep inspection, and beautiful visualization capabilities of a scientific package. Together with Python, it provides a very complete set of tools for scientific computing.

    -
    -
    -

    The basic steps of the scientific method

    + +
    +

    The basic steps of the scientific method#

    The scientific method is a set of good practices used to achieve new knowledge in a valid way. Broadly speaking, the stages of the scientific method are as follows:

    1. Observation: first find something that needs an explanation

    2. @@ -630,51 +523,51 @@

      The basic steps of the scientific method -

      Introduction to scientific research with Spyder

      +

    +
    +

    Introduction to scientific research with Spyder#

    If you’re not familiar with Spyder, we recommend you start with our Quickstart. But if you want a summary, here’s a quick overview.

    -
    +

    Note

    If you already have experience with Spyder, you can skip to Preparation work section.

    -
    -

    Editor

    +
    +

    Editor#

    The Editor is the place where you write your code and save it as a file (script). It allows you to easily persist your work. This is where you write the code you want to keep from the data analysis you do in IPython Console. Here you will also be able to read, edit and run the code from this workshop.

    -
    -
    -

    IPython Console

    +
    +
    +

    IPython Console#

    The IPython Console is the Spyder’s component where you write chunks of code that you want to experiment with. In this workshop, we are going to give you pieces of code that you can copy and run in this console.

    In essence, the IPython Console allows you to execute commands and interact with data using Python.

    -
    -
    -

    Variable Explorer

    + +
    +

    Variable Explorer#

    The Variable Explorer is one of Spyder’s best features. It allows you to interactively browse and manage the objects generated in the code of the currently selected IPython Console session.

    The Variable Explorer is one of the most frequently used components in this workshop. This is the pane where we will observe the data and most of the results of the scientific analysis, except for the plots.

    -
    -
    -

    Plots pane

    + +
    +

    Plots pane#

    The Plots pane shows all the static graphs and images created in your IPython Console session. All plots generated by the code will appear in this component. You will also be able to save each graphic in a local file or copy it to the clipboard to share it with other researchers.

    -
    -
    -

    Code Analysis (share a stylish code!)

    + +
    +

    Code Analysis (share a stylish code!)#

    Wouldn’t it be great to have a tool to be able to detect code errors, stylistic problems, bad practices, inconsistencies and other issues? This is precisely the task of the Code Analysis. Your code can run, but if you are going to share it with other researchers it would be great if it is both readable and neat as well.

    -
    -
    -
    -
    -

    Preparation work

    + + + +
    +

    Preparation work#

    Before starting, you must have installed some packages and libraries needed to run the code. We recommend you to install these requirements in a virtual environment. Here we explain step by step how to do it.

    -
    -

    Setting up the Conda environment

    +
    +

    Setting up the Conda environment#

    If you would like to have Spyder in a dedicated environment to update it separately from your other packages and avoid any conflicts, you can.

    You can set up your environment in two different ways.

    -
    +

    Important

    We recommend creating the virtual environment with Anaconda (or Miniconda) as it integrates seamlessly with Spyder. You can find installation instructions in Anaconda documentation.

    -
    -

    1. With commands

    +
    +

    1. With commands#

    Just run the following command in your Anaconda Prompt (Windows) or terminal (other platforms), for a minimal install of Spyder into a new environment called scientific-computing:

    -
    +

    Warning

    Spyder now offers Standalone installers for Windows and macOS, making it easier to get up and running with the application without having to download Anaconda or manually install it in your existing environment. If you use the standalone installer, there is no need to install spyder=5 with conda.

    -
    -
    -

    2. From an environment.yml file

    +
    +
    +

    2. From an environment.yml file#

    You can also install the virtual environment easily using the environment file (scientific-computing.yml) that we share with you. Just run the following command in the terminal (you must have the environment file in the current directory):

    $ conda env create -f scientific-computing.yml
     
    -
    -
    -

    Activate environment

    +
    +
    +

    Activate environment#

    You can now enter the newly created virtual environment in this way:

    $ conda activate scientific-computing
     
    -
    -
    -
    -

    Downloading the dataset

    + + +
    +

    Downloading the dataset#

    We are going to work with a public dataset called OKCupid, collected by Kirkegaard and Bjerrekaer. The dataset is composed of 68,371 records and 2,626 variables.

    Download the OKCupid dataset to a directory of your choice.

    -
    -
    -

    Setting up the working directory

    + +
    +

    Setting up the working directory#

    The virtual environment and the data file are now ready. The only thing that remains is to create a directory to work in. In your operating system, create a new directory with the name of your choice. Then copy and unzip the dataset file there.

    Here is an example (on Linux or macOS):

    +
    +

    Download the code#

    Although the workshop is designed for you to write the code in the IPython Console, we have created a file that you can download. This script provides all the code you will write in this workshop, and you can use it as a guide if you get lost.

    -
    -
    -
    -

    The dataset

    + + +
    +

    The dataset#

    OKCupid is a dataset that gathers information obtained from the online dating site OKCupid. It consists of 68,371 records collected automatically employing a scraper that extracted public information.

    The dataset contains demographic data (e.g., gender, sexual orientation and age). It also includes answers to general questions used by the website’s algorithm to calculate some personality indicators to help find compatible matches.

    If you want more information about how this dataset was collected and what kind of information it contains you can get it in this paper: The OKCupid dataset.

    @@ -756,13 +649,13 @@

    The dataset

    You can see that the object is of type DataFrame and the number of rows and columns of the object.

    -

    -
    -

    Explore the dataset

    -
    -

    Age

    + +
    +

    Explore the dataset#

    +
    +

    Age#

    Now, let’s explore one of the variables, in this case, the numeric variable age (d_age).

    -
    +

    Note

    In the OKCupid dataset, all demographic variables are prefixed with “d_” and profile variables with “p_”.

    @@ -778,7 +671,7 @@

    Age More variables in Variable Explorer

    The values are floats. The lowest age is 18.0 years and the highest is 100.0 years.

    -

    Age histogram with mean line -
    -
    -

    Religion seriosity

    + +
    +

    Religion seriosity#

    We know the extent of the dataframe and we have seen how to explore a quantitative variable. Now let’s move on to a qualitative variable. The columns attribute shows a list of column names in the dataframe. We also know that demographic variables are prefixed with “d_”, so we can look for variable names that correspond to this prefix.

    demograph = [v for v in list(data.columns) if v.startswith("d_")]
     
    @@ -846,10 +739,10 @@

    Religion seriosity -

    Think of a theory and write a hypothesis

    +

    + +
    +

    Think of a theory and write a hypothesis#

    A theory is nothing more than an explanation of something. For example, we could get involved in the eternal conflict between cats and dogs. I, as a dog person, might have a theory (unscientific, of course) that those who prefer to have the companionship of a dog are smarter people than those who prefer a wicked (but lovable) kitty. To test the support of a theory, one can make a prediction based on it and see how this prediction behaves in an experiment or a concrete situation. We call this prediction a hypothesis.

    A hypothesis is a statement that can be tested employing the scientific method. They must be verifiable using empirical evidence or data. For example, green is the best color is not a hypothesis since it cannot be proven or disproven.

    Concerning the above theory of a person’s pet preferences, to explore it we should find two variables to relate. The first variable would be related to a self-identification as a cat person or dog person. The second variable would be related to a person’s ability to solve problems and situations.

    @@ -859,13 +752,13 @@

    Think of a theory and write a hypothesis +

    Note

    SPOILER ALERT: If you are a cat person, and feel you should immediately leave this workshop, I suggest you stay. If you’re not a cat person, stay too.

    -

    -
    -

    Build the test

    + +
    +

    Build the test#

    We already know which questions will be part of the cognitive ability test. Now we are going to process this data to obtain the scores for each person.

    First, we make a copy of the original dataset:

    ca_test = data.copy()
    @@ -890,7 +783,7 @@ 

    Build the testprint(f"{QUESTION} not found.")

    -
    +

    Important

    Some test_items questions are not in the data but don’t worry about that. We use a try... except block to ignore these errors. Answering these questions was optional, so many OkCupid site users did not answer all of them. So we have removed from the records the users who did not answer the 14 questions we have chosen for the cognitive ability test. This reduced the sample size considerably. There are other ways to avoid this reduction, but they are outside the scope of this workshop.

    @@ -911,8 +804,8 @@

    Build the testca_test dataframe for the answers of each column starting with “resp” (we use the regular expression regex="^resp" and the method filter) and sum the True values of each row with sum(axis=1). Then we store these results in the “cognitive_score” column of the ca_test dataset.

    You can see the results of these operations by typing in the IPython Console ca_test.cognitive_score.describe(). If you do so, in count you will see that the new number of records has been reduced to 479 (the rest of the 68,371 users did not answer all of these questions).

    -

    +
    +

    Relate variables#

    Remember that the hypothesis relates two variables: which pet do you prefer and cognitive ability. The measurement of pet preferences will be made from question q997 (categorical or qualitative variable) and cognitive ability will be measured from the sum of the correct answers on the test (quantitative interval variable). With this type of variable we can make some box plots to see if there are differences between the means.

    But first, let’s change the standard Seaborn palette, to get prettier plots.

    palette = sns.color_palette("husl")
     sns.palplot(palette)
     
    -
    +

    Note

    Seaborn allows you to choose from different styles of graphics and color palettes. More information is available at https://seaborn.pydata.org/tutorial/color_palettes.html

    @@ -946,7 +839,7 @@

    Relate variables

    Box plots or box-whisker diagrams display, near the center of the box, the mean of the data as a horizontal line. The lines bordering the box represent 50% of the observations (interquartile range ). Outside the box, upwards and downwards, we find two whiskers: the lower one represents the mean of the values in the lower part of the dataset, and the upper one represents the mean of the values in the upper part of the dataset. The points beyond the whiskers are outliers.

    -
    -

    +
    +

    ANOVA test#

    To make sure that the differences between the means are statistically significant, we will perform an ANOVA (analysis of variance) because we are going to compare the means of more than two groups.

    How does ANOVA work? This analysis tells us whether three or more means are equal. If so, this would support the null hypothesis.

    -
    +

    Note

    The null hypothesis is an alternative prediction to the one we have stated in our hypothesis. The null hypothesis simply states that the observed differences in means are due to random variations that occur when samples are collected.

    An ANOVA produces an F-ratio (also called F-statistic) that compares the amount of systematic variation in the data (variation that can be explained by the model or hypothesis) with the amount of unsystematic variance (variation that cannot be explained by our hypothesis or model). This means that F is the ratio of the model to its error. ANOVA also produces a p-value that indicates the probability that the variation can be attributed to the null hypothesis. The smaller the p-value, the less likely it is that the observed variation is due to chance.

    -
    -

    Formatting the data

    +
    +

    Formatting the data#

    To perform an ANOVA, let’s start by pivoting the dataset with the cognitive ability test results. The pet preferences values will now be the column names, and each row will represent a person.

    -
    +

    Warning

    To perform an ANOVA, certain requirements or assumptions must be met. For example, the distributions of the residuals must be normal. This is not the case here. There are more appropriate statistical tests for this example, and the possibility of performing certain transformations on the data in order to apply ANOVA in this case. However, we use ANOVA because it is a fairly popular test, and because the purpose of this workshop is to serve as an introduction to scientific computing with Spyder. We do not intend here to obtain scientific results for publication.

    @@ -1004,7 +897,7 @@

    Formatting the datadog_or_cat_pivot.dropna(how="all", inplace=True)

    - -
    +
    +

    Run ANOVA#

    Now, let’s run ANOVA and store the output in two variables: f_value and p_value. Notice that since dog_or_cat_samples is a list, we must pass the argument with an asterisk (*dog_or_cat_samples).

    f_value, p_value = stats.f_oneway(*dog_or_cat_samples)
     

    With the help of stats.f_oneway in the Help Pane you can read a description of the output of this function, some interesting notes about the test, and some references that you can use to better understand the nature of this analysis.

    -
    +

    Important

    In the Help pane you will read that ANOVA requires certain assumptions to be satisfied. In this workshop we have not checked those assumptions because our goal is merely to show some Spyder functions that make the research work easier. Thus, the results obtained in this example with ANOVA should not be taken too rigorously.

    @@ -1038,13 +931,13 @@

    Run ANOVAf_critical (2.6241) is larger than that of f_value (0.5813). This means that the variance between the means of these groups is not significantly different. Since the p value indicates that we cannot rule out random variations, then we have to discard our hypothesis.

    What is the conclusion of all this? There seems to be little or no evidence in our data to think that there is indeed a correlation between a person’s pet preferences and his or her ability to solve practical or abstract problems. Cat and dog owners, rejoice!

    -

    -
    -
    -

    Report and share

    + + +
    +

    Report and share#

    In science, sharing results, good and bad, is critical. Today, in scientific computing, it is also crucial to share data, and the code used to process and analyze it. To help with this, we will use Spyder’s Code Analysis.

    -
    -

    Code Analysis

    +
    +

    Code Analysis#

    When you share code, you want it to be readable, clean, and not overly complex. The Code Analysis component can help us detect these issues and even bugs that can affect the performance of our code.

    To see an example, you can open the scientific-computing-astro.py file and run the Code Analysis (open the file in the pane and click on the green triangular button in the upper right corner).

    Code Analysis pane Example for astrological sign and cognitive ability @@ -1057,10 +950,10 @@

    Code Analysis -

    Final words

    +

    +
    +
    +

    Final words#

    In this workshop we have taken the first steps to use Spyder for scientific computing. We have seen how from a question or doubt a hypothesis is raised. This question can also emerge from the exploration of some data, which can be done by calculating some measures (such as mean, median, standard deviation) or by drawing some plots.

    Often, in order to answer the question, we must process some data (for example, for the construction of a cognitive ability test).

    Finally, we try to establish a relationship between variables with some statistical tests. The results of these tests will support or not our initial hypothesis.

    @@ -1080,13 +973,13 @@

    Final wordsofficial documentation.

    Thank you for reaching the end of this workshop! We hope you found it helpful and informative.

    If you are interested in an introduction to financial analysis with Spyder, you can visit the workshop Financial Data Analysis with Spyder.

    -
    -

    Homework

    +
    +

    Homework#

    If you want to check what you have learned, we suggest you analyze the data to try to answer the following question: Do the different zodiac signs influence the results of a cognitive ability test?, you can check the Python script scientific-computing-astro.py if you have any doubts.

    -
    -

    -
    -

    Further reading

    + + +
    +

    Further reading#

    For a description of the dataset used, see the following paper:

    -
    -
    + + - + - - - -
    - -
    - - - - - -
    -
    - + + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/_static/webpack-macros.html b/_static/webpack-macros.html new file mode 100644 index 000000000..33af6a779 --- /dev/null +++ b/_static/webpack-macros.html @@ -0,0 +1,9 @@ + + + + Spyder IDE Documentation + + + + + diff --git a/current/_sources/faq.rst.txt b/current/_sources/faq.rst.txt index 1751938d2..3180806a7 100644 --- a/current/_sources/faq.rst.txt +++ b/current/_sources/faq.rst.txt @@ -7,7 +7,7 @@ Installing and updating ======================= .. dropdown:: Q: How do I install Spyder? - :container: + dropdown-id-install-spyder + :name: install-spyder The easiest way to install Spyder is with the Anaconda Python distribution, which comes with everything you need to get started in an all-in-one package. Download it from its `webpage`_. @@ -18,7 +18,7 @@ Installing and updating .. dropdown:: Q: How do I install Spyder on Windows Subsystem for Linux 2 (WSL2)? - :container: + dropdown-id-install-wsl2 + :name: install-wsl2 If you already installed Spyder on your Windows machine, you do not need to reinstall it on a WSL2-based Linux environment if your code must run there. @@ -47,7 +47,7 @@ Installing and updating .. dropdown:: Q: How do I update Spyder using conda? - :container: + dropdown-id-update-conda + :name: update-conda From the command line (or Anaconda prompt on Windows), run: @@ -64,7 +64,7 @@ Installing and updating .. dropdown:: Q: How do update I Spyder using Anaconda Navigator? - :container: + dropdown-id-update-navigator + :name: update-navigator Open the "gear" menu in Spyder's section under :guilabel:`Home` in Navigator. Go to :guilabel:`Install specific version` and select the version of Spyder you want to use. @@ -80,7 +80,7 @@ Running Spyder ============== .. dropdown:: Q: How do I run Spyder? - :container: + dropdown-id-run-spyder + :name: run-spyder You can launch it in any of the following ways: @@ -98,7 +98,7 @@ Running Spyder .. dropdown:: Q: Can I try Spyder without installing it? - :container: + dropdown-id-run-binder + :name: run-binder Yes! With `Binder`_, you can work with a fully functional copy of Spyder that runs right in your web browser. @@ -109,7 +109,7 @@ Running Spyder .. dropdown:: Q: What are the system requirements for Spyder? How resource-intensive is it? - :container: + dropdown-id-run-system-reqs + :name: run-system-reqs Spyder works on modern versions of Windows, macOS and Linux (see the table below for recommended versions) via Anaconda, as well as other methods. It typically uses relatively minimal CPU when idle, and 0.5 GB - 1 GB of RAM, depending on how long you've been using it and how many files, projects, panes and consoles you have open. @@ -128,7 +128,7 @@ Running Spyder .. dropdown:: Q: How do I run Spyder installed in a conda environment using Anaconda Navigator? - :container: + dropdown-id-run-navigator + :name: run-navigator Select the environment you want to launch Spyder from under :guilabel:`Applications on`. If Spyder is installed in this environment, you will see it in Navigator's :guilabel:`Home` window. @@ -139,7 +139,7 @@ Running Spyder .. dropdown:: Q: How do I run Spyder installed in a conda environment using the command line? - :container: + dropdown-id-run-terminal + :name: run-terminal Activate your conda environment by typing the following in your terminal (or Anaconda Prompt on Windows): @@ -158,7 +158,7 @@ Using Spyder ============ .. dropdown:: Q: How do I install Python packages to use within Spyder if I installed Spyder with conda? - :container: + dropdown-id-using-install-packages + :name: using-install-packages The first approach for installing a package should be using conda. In your system terminal (or Anaconda Prompt on Windows), type: @@ -176,10 +176,8 @@ Using Spyder :start: 306 -.. _using-existing-environment: - .. dropdown:: Q: How do I get Spyder to work with my existing Python packages/environment? - :container: + dropdown-id-using-existing-environment + :name: using-existing-environment To work with an existing environment in Spyder, change the default Python interpreter for new :doc:`/panes/ipythonconsole`\s to point to this environment. @@ -208,10 +206,8 @@ Using Spyder Execute the given command in your terminal (the Anaconda Prompt on Windows) with the environment activated, and finally restart the kernel once more. -.. _using-packages-installer: - .. dropdown:: Q: How do I install Python packages to use within Spyder if I downloaded Spyder from the standalone installers? - :container: + dropdown-id-using-packages-installer + :name: using-packages-installer Watch our video on using additional packages or follow the instructions below. @@ -237,7 +233,7 @@ Using Spyder .. dropdown:: Q: How do I reset Spyder's preferences to the defaults? - :container: + dropdown-id-using-reset-prefs + :name: using-reset-prefs Either use the :guilabel:`Reset Spyder to factory defaults` under :guilabel:`Tools` in Spyder's menu bar, the :guilabel:`Reset Spyder settings` Start menu shortcut (Windows), or run ``spyder --reset`` in your system terminal (Anaconda prompt on Windows). @@ -246,7 +242,7 @@ Using Spyder .. dropdown:: Q: How do I change Spyder's language? - :container: + dropdown-id-using-change-language + :name: using-change-language Under :guilabel:`General` in Spyder's :guilabel:`Preferences`, go to the :guilabel:`Advanced settings` tab and select your language from the options displayed under :guilabel:`Language`. @@ -255,7 +251,7 @@ Using Spyder .. dropdown:: Q: How do I use code cells in Spyder? - :container: + dropdown-id-using-code-cells + :name: using-code-cells To create a cell in Spyder's :doc:`/panes/editor`, type ``#%%`` in your script. Each ``#%%`` will make a new cell. @@ -266,7 +262,7 @@ Using Spyder .. dropdown:: Q: How do I use plugins with Spyder (e.g. Spyder-Notebook, Spyder-Terminal, Spyder-Unittest)? - :container: + dropdown-id-using-plugins + :name: using-plugins Spyder plugins are available in the ``conda-forge`` conda channel. To install one, type on the command line (or Anaconda Prompt on Windows): @@ -292,7 +288,7 @@ Using Spyder .. dropdown:: Q: How do I clear all variables before executing my code? - :container: + dropdown-id-using-clear-variables + :name: using-clear-variables Check the option :guilabel:`Remove all variables before execution` in the :guilabel:`Configuration per file...` dialog under the :guilabel:`Run` menu. @@ -301,7 +297,7 @@ Using Spyder .. dropdown:: Q: How do I run my code in a dedicated console or an external system terminal? - :container: + dropdown-id-using-dedicated-console + :name: using-dedicated-console Select the appropriate option in the :guilabel:`Configuration per file...` dialog under the :guilabel:`Run` menu. @@ -310,7 +306,7 @@ Using Spyder .. dropdown:: Q: How do I change the syntax highlighting theme in the Editor? - :container: + dropdown-id-using-syntax-theme + :name: using-syntax-theme Go to :guilabel:`Preferences` and select the theme you want under :guilabel:`Syntax highlighting theme` in the :guilabel:`Appearance` section. @@ -324,14 +320,14 @@ Troubleshooting =============== .. dropdown:: Q: I've found a bug or issue with Spyder. What do I do? - :container: + dropdown-id-troubleshooting-spyder + :name: troubleshooting-spyder You should first follow the steps in our :doc:`troubleshooting guide`. If you can't solve your problem, open an issue by following the instructions in our :doc:`/troubleshooting/submit-a-report` section. .. dropdown:: Q: I get an error in the IPython console running my code! Help! - :container: + dropdown-id-troubleshooting-running-code + :name: troubleshooting-running-code First, make sure the error you are seeing is not a bug in your code. To confirm this, try running it in any standard Python interpreter. @@ -342,7 +338,7 @@ Troubleshooting .. dropdown:: Q: Code completion/help doesn't work; what can I do? - :container: + dropdown-id-troubleshooting-completion + :name: troubleshooting-completion If nothing is displayed in the calltip, hover hint or :doc:`/panes/help` pane, make sure the object you are inspecting has a docstring, and try executing your code in the :doc:`/panes/ipythonconsole` to get help and completions there. If this doesn't work, try restarting PyLS by right-clicking the :guilabel:`LSP Python` label item in the statusbar at the bottom of Spyder's main window, and selecting the :guilabel:`Restart Python Language Server` option. @@ -351,7 +347,7 @@ Troubleshooting .. dropdown:: Q: I get the message "An error occurred while starting the kernel". How do I fix this? - :container: + dropdown-id-troubleshooting-starting-kernel + :name: troubleshooting-starting-kernel First, make sure your version of Spyder-Kernels is compatible with that of Spyder. See the table in the :ref:`spyder-kernels-version-ref` section of the troubleshooting guide to check. @@ -366,7 +362,7 @@ Troubleshooting .. dropdown:: Q: Spyder doesn't launch or is slow on macOS Big Sur. How can I get it working? - :container: + dropdown-id-troubleshooting-macos-bigsur + :name: troubleshooting-macos-bigsur Spyder is in the final stages of being updated for full compatibility with macOS 11 Big Sur, which will be released by the end of 2020 as part of version 4.2.1. However, you can get it working right now with the workaround below. @@ -393,7 +389,7 @@ About Spyder ============ .. dropdown:: Q: What's Spyder's licensing situation? Is commercial use allowed? - :container: + dropdown-id-commercial-use + :name: commercial-use Spyder is 100% free and open source; there is no paid version or prohibition on commercial use. It is developed by its international user community, and supported by its users through `OpenCollective`_ and by its generous sponsoring organizations, including `Quansight`_ and `NumFOCUS`_. @@ -407,7 +403,7 @@ About Spyder .. dropdown:: Q: What do the Anaconda licensing changes mean for Spyder? - :container: + dropdown-id-anaconda-license + :name: anaconda-license If you use Spyder with the Anaconda distribution, they `recently changed`_ their `Terms of Service`_ to add restrictions on large (> 200 employee) for-profit companies using Anaconda on a large scale. However, these terms only apply to the package infrastructure (the full Anaconda distribution and the ``defaults`` conda channel). diff --git a/current/_sources/index.rst.txt b/current/_sources/index.rst.txt index 529c84651..ecec0b97d 100644 --- a/current/_sources/index.rst.txt +++ b/current/_sources/index.rst.txt @@ -20,57 +20,73 @@ Where to go now? Spyder's documentation provides a variety of resources that will help you learn how to use the application and explore each one of its panes. These include video tutorials, in-depth descriptions and how-to guides covering a wide range of needs and experience levels with Spyder. -.. panels:: - :container: container-lg pb-3 px-md-0 px-5 - :column: col-lg-4 col-md-6 col-sm-6 col-xs-12 p-2 +.. grid:: 1 2 3 3 + :gutter: 3 - .. div:: align-center + .. grid-item-card:: - .. rst-class:: fasb fa-book-open + .. div:: align-center - .. div:: align-center + .. rst-class:: fasb fa-book-open - If you are looking for a summary of its features and interface, check out the :doc:`quickstart`. - --- - .. div:: align-center + .. div:: align-center - .. rst-class:: fasb fa-download + If you are looking for a summary of its features and interface, check out the :doc:`quickstart`. - .. div:: align-center - If you don't have Spyder installed and want to get started, follow the :doc:`/installation`. - --- - .. div:: align-center + .. grid-item-card:: - .. rst-class:: fasb fa-walking + .. div:: align-center - .. div:: align-center + .. rst-class:: fasb fa-download - If you are completely new to Spyder, watch our basic tutorial series, :doc:`videos/first-steps-with-spyder`. - --- - .. div:: align-center + .. div:: align-center - .. rst-class:: fasb fa-columns + If you don't have Spyder installed and want to get started, follow the :doc:`/installation`. - .. div:: align-center - If you are familiar with Spyder and want to explore the functionality of its panes in more detail, go to :doc:`panes/index`. - --- - .. div:: align-center + .. grid-item-card:: - .. rst-class:: fasb fa-first-aid + .. div:: align-center - .. div:: align-center + .. rst-class:: fasb fa-walking - If you've run into a Spyder problem and need help solving it, take a look at our :doc:`troubleshooting guide`. - --- - .. div:: align-center + .. div:: align-center - .. rst-class:: fasb fa-question-circle + If you are completely new to Spyder, watch our basic tutorial series, :doc:`videos/first-steps-with-spyder`. - .. div:: align-center - If you have a question about Spyder, visit the :doc:`faq` section. + .. grid-item-card:: + + .. div:: align-center + + .. rst-class:: fasb fa-columns + + .. div:: align-center + + If you are familiar with Spyder and want to explore the functionality of its panes in more detail, go to :doc:`panes/index`. + + + .. grid-item-card:: + + .. div:: align-center + + .. rst-class:: fasb fa-first-aid + + .. div:: align-center + + If you've run into a Spyder problem and need help solving it, take a look at our :doc:`troubleshooting guide`. + + + .. grid-item-card:: + + .. div:: align-center + + .. rst-class:: fasb fa-question-circle + + .. div:: align-center + + If you have a question about Spyder, visit the :doc:`faq` section. @@ -138,12 +154,11 @@ Connect with Spyder through our social media channels to stay up to date with ou :maxdepth: 2 :hidden: - Welcome quickstart installation + FAQ videos/index panes/index plugins/index - troubleshooting/index workshops/index - FAQ + troubleshooting/index diff --git a/current/_sources/installation.rst.txt b/current/_sources/installation.rst.txt index 6ad83daad..0c9e76c11 100644 --- a/current/_sources/installation.rst.txt +++ b/current/_sources/installation.rst.txt @@ -1,8 +1,8 @@ .. _install-guide: -################## -Installation Guide -################## +############# +Install Guide +############# Spyder is relatively easy to install on Windows, Linux and macOS. Just make sure to read and follow these instructions with care. diff --git a/current/_sources/panes/index.rst.txt b/current/_sources/panes/index.rst.txt index f2b0867c1..24f3561c2 100644 --- a/current/_sources/panes/index.rst.txt +++ b/current/_sources/panes/index.rst.txt @@ -1,6 +1,6 @@ -============== -Panes in Depth -============== +===== +Panes +===== .. toctree:: :maxdepth: 2 diff --git a/current/_sources/plugins/index.rst.txt b/current/_sources/plugins/index.rst.txt index 3e569e886..a59b3493d 100644 --- a/current/_sources/plugins/index.rst.txt +++ b/current/_sources/plugins/index.rst.txt @@ -1,6 +1,6 @@ -============== -Spyder Plugins -============== +======= +Plugins +======= .. toctree:: :maxdepth: 2 diff --git a/current/_sources/quickstart.rst.txt b/current/_sources/quickstart.rst.txt index 7defb321c..c7d9e74ec 100644 --- a/current/_sources/quickstart.rst.txt +++ b/current/_sources/quickstart.rst.txt @@ -1,6 +1,6 @@ -########## -Quickstart -########## +#### +Tour +#### Welcome to our Quickstart! Here you will find an interactive tour that will guide you through Spyder's interface. @@ -10,15 +10,15 @@ Finally, you'll get to walk through some of Spyder's key panes and functionality .. raw:: html
    - - - - - - - - - + + + + + + + + + diff --git a/current/_sources/videos/index.rst.txt b/current/_sources/videos/index.rst.txt index 8deb0a457..c18dbe523 100644 --- a/current/_sources/videos/index.rst.txt +++ b/current/_sources/videos/index.rst.txt @@ -1,6 +1,6 @@ -============ -Intro Videos -============ +========= +Tutorials +========= .. toctree:: :maxdepth: 2 diff --git a/current/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css b/current/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css new file mode 100644 index 000000000..eb19f698a --- /dev/null +++ b/current/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}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/current/_sphinx_design_static/design-tabs.js b/current/_sphinx_design_static/design-tabs.js new file mode 100644 index 000000000..36b38cf0d --- /dev/null +++ b/current/_sphinx_design_static/design-tabs.js @@ -0,0 +1,27 @@ +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/current/_static/basic.css b/current/_static/basic.css index 5d8ae085a..2af6139e6 100644 --- a/current/_static/basic.css +++ b/current/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -130,7 +130,7 @@ ul.search li a { font-weight: bold; } -ul.search li div.context { +ul.search li p.context { color: #888; margin: 2px 0 0 30px; text-align: left; @@ -222,7 +222,7 @@ table.modindextable td { /* -- general body styles --------------------------------------------------- */ div.body { - min-width: 450px; + min-width: 360px; max-width: 800px; } @@ -237,14 +237,8 @@ a.headerlink { visibility: hidden; } -a.brackets:before, -span.brackets > a:before{ - content: "["; -} - -a.brackets:after, -span.brackets > a:after { - content: "]"; +a:visited { + color: #551A8B; } h1:hover > a.headerlink, @@ -335,12 +329,16 @@ 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; @@ -379,6 +377,8 @@ div.body p.centered { 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; @@ -386,6 +386,8 @@ div.admonition > :last-child { div.sidebar::after, aside.sidebar::after, +nav.contents::after, +aside.topic::after, div.topic::after, div.admonition::after, blockquote::after { @@ -428,10 +430,6 @@ table.docutils td, table.docutils th { border-bottom: 1px solid #aaa; } -table.footnote td, table.footnote th { - border: 0 !important; -} - th { text-align: left; padding-right: 5px; @@ -508,6 +506,63 @@ 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 ----------------------------------------------------- */ @@ -558,19 +613,26 @@ ul.simple p { margin-bottom: 0; } -dl.footnote > dt, -dl.citation > dt { +aside.footnote > span, +div.citation > span { float: left; - margin-right: 0.5em; } - -dl.footnote > dd, -dl.citation > dd { +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; } - -dl.footnote > dd:after, -dl.citation > dd:after { +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { content: ""; clear: both; } @@ -587,10 +649,6 @@ dl.field-list > dt { padding-right: 5px; } -dl.field-list > dt:after { - content: ":"; -} - dl.field-list > dd { padding-left: 0.5em; margin-top: 0em; @@ -616,6 +674,16 @@ dd { 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; @@ -634,14 +702,6 @@ dl.glossary dt { font-size: 1.1em; } -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - .versionmodified { font-style: italic; } @@ -682,8 +742,9 @@ dl.glossary dt { .classifier:before { font-style: normal; - margin: 0.5em; + margin: 0 0.5em; content: ":"; + display: inline-block; } abbr, acronym { @@ -691,6 +752,14 @@ abbr, acronym { cursor: help; } +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + /* -- code displays --------------------------------------------------------- */ pre { @@ -707,6 +776,7 @@ span.pre { -ms-hyphens: none; -webkit-hyphens: none; hyphens: none; + white-space: nowrap; } div[class*="highlight-"] { @@ -770,8 +840,12 @@ div.code-block-caption code { table.highlighttable td.linenos, span.linenos, -div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */ - user-select: none; +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 { @@ -786,16 +860,6 @@ div.literal-block-wrapper { margin: 1em 0; } -code.descname { - background-color: transparent; - font-weight: bold; - font-size: 1.2em; -} - -code.descclassname { - background-color: transparent; -} - code.xref, a code { background-color: transparent; font-weight: bold; diff --git a/current/_static/css/custom_styles.css b/current/_static/css/custom_styles.css index 65c80f207..6ba61377d 100644 --- a/current/_static/css/custom_styles.css +++ b/current/_static/css/custom_styles.css @@ -7,6 +7,10 @@ strong { /* Center all images by default */ +section img { + margin-bottom: 1rem; +} + .section img:not([class]) { display: block; margin-left: auto; @@ -45,8 +49,8 @@ strong { /* Ensure FA icons applied to section divs display inline */ -div.fasb h3, -div.fabb h3 { +section.fasb h3, +section.fabb h3 { display: inline-block; } @@ -81,19 +85,19 @@ iframe { /*** Custom colors for specific FA icons in the index page ***/ -div.fa-laptop-code::before { +section.fa-laptop-code::before { color: #4e4e4e; } -div.fa-book::before { +section.fa-book::before { color: #6a3514; } -div.fa-globe-americas::before { +section.fa-globe-americas::before { color: #1c4489; } -div.fa-user-friends::before { +section.fa-user-friends::before { color: #f6951f; } @@ -105,7 +109,7 @@ div.fa-user-friends::before { width: 1.3em; } -div.openteams-icon::before { +section.openteams-icon::before { margin-right: 0; padding-bottom: 0; } @@ -201,27 +205,11 @@ a[href="#join-our-community"] + ul li.toc-h3 { display: none; } -/* Version selector and header */ +/* Version selector using PyData Sphinx Theme features */ -#versions-header { - color: rgb(0 0 0 / 65%); - font-size: 0.8rem; - margin-top: 1.1rem; - text-transform: uppercase; -} - -#select-versions { - background-color: transparent; - border: 1px solid rgb(0 0 0 / 15%); - color: rgb(0 0 0 / 65%); - font-size: 90%; - margin-bottom: 7px; - padding: 2px; -} - -#select-versions, -#select-versions option { - width: 98%; +/* stylelint-disable-next-line selector-class-pattern -- Third party class using BEM */ +.version-switcher__button { + margin-bottom: 0 !important; } /*** Styles for video transcript dropdown elements ***/ @@ -352,13 +340,3 @@ a.dropdown-link:focus { color: #fff; text-decoration: none; } - -/* Temporary fix for invisible heading :before blocking clicks */ - -h2::before, -h3::before, -h4::before, -h5::before, -h6::before { - pointer-events: none; -} diff --git a/current/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css b/current/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css new file mode 100644 index 000000000..eb19f698a --- /dev/null +++ b/current/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}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/current/_static/design-tabs.js b/current/_static/design-tabs.js new file mode 100644 index 000000000..36b38cf0d --- /dev/null +++ b/current/_static/design-tabs.js @@ -0,0 +1,27 @@ +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/current/_static/doctools.js b/current/_static/doctools.js index 61ac9d266..4d67807d1 100644 --- a/current/_static/doctools.js +++ b/current/_static/doctools.js @@ -2,320 +2,155 @@ * doctools.js * ~~~~~~~~~~~ * - * Sphinx JavaScript utilities for all documentation. + * Base JavaScript utilities for all Sphinx HTML documentation. * - * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ - -/** - * select a different prefix for underscore - */ -$u = _.noConflict(); - -/** - * make the code below compatible with browsers without - * an installed firebug like debugger -if (!window.console || !console.firebug) { - var names = ["log", "debug", "info", "warn", "error", "assert", "dir", - "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", - "profile", "profileEnd"]; - window.console = {}; - for (var i = 0; i < names.length; ++i) - window.console[names[i]] = function() {}; -} - */ - -/** - * small helper function to urldecode strings - * - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL - */ -jQuery.urldecode = function(x) { - if (!x) { - return x - } - return decodeURIComponent(x.replace(/\+/g, ' ')); -}; - -/** - * small helper function to urlencode strings - */ -jQuery.urlencode = encodeURIComponent; - -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s === 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; +"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); } - return result; }; -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node, addItems) { - if (node.nodeType === 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && - !jQuery(node.parentNode).hasClass(className) && - !jQuery(node.parentNode).hasClass("nohighlight")) { - var span; - var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.className = className; - } - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - if (isInSVG) { - var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - var bbox = node.parentElement.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute('class', className); - addItems.push({ - "parent": node.parentNode, - "target": rect}); - } - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this, addItems); - }); - } - } - var addItems = []; - var result = this.each(function() { - highlight(this, addItems); - }); - for (var i = 0; i < addItems.length; ++i) { - jQuery(addItems[i].parent).before(addItems[i].target); - } - return result; -}; - -/* - * backward compatibility for jQuery.browser - * This will be supported until firefox bug is fixed. - */ -if (!jQuery.browser) { - jQuery.uaMatch = function(ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - }; - jQuery.browser = {}; - jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; -} - /** * Small JavaScript module for the documentation. */ -var Documentation = { - - init : function() { - this.fixFirefoxAnchorBug(); - this.highlightSearchWords(); - this.initIndexTable(); - if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { - this.initOnKeyListeners(); - } +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); }, /** * i18n support */ - TRANSLATIONS : {}, - PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, - LOCALE : 'unknown', + 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 : function(string) { - var translated = Documentation.TRANSLATIONS[string]; - if (typeof translated === 'undefined') - return string; - return (typeof translated === 'string') ? translated : translated[0]; + 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 : function(singular, plural, n) { - var translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated === 'undefined') - return (n == 1) ? singular : plural; - return translated[Documentation.PLURALEXPR(n)]; + 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 : function(catalog) { - for (var key in catalog.messages) - this.TRANSLATIONS[key] = catalog.messages[key]; - this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); - this.LOCALE = catalog.locale; + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; }, /** - * add context elements like header anchor links + * helper function to focus on search bar */ - addContextElements : function() { - $('div[id] > :header:first').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this headline')). - appendTo(this); - }); - $('dt[id]').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this definition')). - appendTo(this); - }); + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); }, /** - * workaround a firefox stupidity - * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + * Initialise the domain index toggle buttons */ - fixFirefoxAnchorBug : function() { - if (document.location.hash && $.browser.mozilla) - window.setTimeout(function() { - document.location.href += ''; - }, 10); - }, - - /** - * highlight the search words provided in the url in the text - */ - highlightSearchWords : function() { - var params = $.getQueryParameters(); - var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; - if (terms.length) { - var body = $('div.body'); - if (!body.length) { - body = $('body'); + 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 = "")); } - window.setTimeout(function() { - $.each(terms, function() { - body.highlightText(this.toLowerCase(), 'highlighted'); - }); - }, 10); - $('') - .appendTo($('#searchbox')); - } - }, - - /** - * init the domain index toggle buttons - */ - initIndexTable : function() { - var togglers = $('img.toggler').click(function() { - var src = $(this).attr('src'); - var idnum = $(this).attr('id').substr(7); - $('tr.cg-' + idnum).toggle(); - if (src.substr(-9) === 'minus.png') - $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); - else - $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); - }).css('display', ''); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { - togglers.click(); - } - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords : function() { - $('#searchbox .highlight-link').fadeOut(300); - $('span.highlighted').removeClass('highlighted'); - }, - - /** - * make the url absolute - */ - makeURL : function(relativeURL) { - return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; - }, + }; - /** - * get the current relative url - */ - getCurrentURL : function() { - var path = document.location.pathname; - var parts = path.split(/\//); - $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { - if (this === '..') - parts.pop(); - }); - var url = parts.join('/'); - return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + 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: function() { - $(document).keydown(function(event) { - var activeElementType = document.activeElement.tagName; - // don't navigate when in search box, textarea, dropdown or button - if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' - && activeElementType !== 'BUTTON' && !event.altKey && !event.ctrlKey && !event.metaKey - && !event.shiftKey) { - switch (event.keyCode) { - case 37: // left - var prevHref = $('link[rel="prev"]').prop('href'); - if (prevHref) { - window.location.href = prevHref; - return false; + 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(); } - case 39: // right - var nextHref = $('link[rel="next"]').prop('href'); - if (nextHref) { - window.location.href = nextHref; - return false; + 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 -_ = Documentation.gettext; +const _ = Documentation.gettext; -$(document).ready(function() { - Documentation.init(); -}); +_ready(Documentation.init); diff --git a/current/_static/documentation_options.js b/current/_static/documentation_options.js index 7bc69bdcc..3868aca0f 100644 --- a/current/_static/documentation_options.js +++ b/current/_static/documentation_options.js @@ -1,12 +1,13 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), +const DOCUMENTATION_OPTIONS = { VERSION: '5', - LANGUAGE: 'None', + LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', FILE_SUFFIX: '.html', LINK_SUFFIX: '.html', HAS_SOURCE: true, SOURCELINK_SUFFIX: '.txt', - NAVIGATION_WITH_KEYS: false + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, }; \ No newline at end of file diff --git a/current/_static/images/spyder_logo.svg b/current/_static/images/spyder_logo.svg new file mode 100644 index 000000000..cb6da14ec --- /dev/null +++ b/current/_static/images/spyder_logo.svg @@ -0,0 +1,91 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/current/_static/images/tour/tour-code-analysis.png b/current/_static/images/tour/tour-code-analysis.png new file mode 100644 index 000000000..f8d39352e Binary files /dev/null and b/current/_static/images/tour/tour-code-analysis.png differ diff --git a/current/_static/images/tour/tour-context-menu.png b/current/_static/images/tour/tour-context-menu.png new file mode 100644 index 000000000..55d5364c2 Binary files /dev/null and b/current/_static/images/tour/tour-context-menu.png differ diff --git a/current/_static/images/tour/tour-default-layout-main.png b/current/_static/images/tour/tour-default-layout-main.png new file mode 100644 index 000000000..2a1d38740 Binary files /dev/null and b/current/_static/images/tour/tour-default-layout-main.png differ diff --git a/current/_static/images/tour/tour-files.png b/current/_static/images/tour/tour-files.png new file mode 100644 index 000000000..4ea031acd Binary files /dev/null and b/current/_static/images/tour/tour-files.png differ diff --git a/current/_static/images/tour/tour-find.png b/current/_static/images/tour/tour-find.png new file mode 100644 index 000000000..4bcf39f36 Binary files /dev/null and b/current/_static/images/tour/tour-find.png differ diff --git a/current/_static/images/tour/tour-options-menu.png b/current/_static/images/tour/tour-options-menu.png new file mode 100644 index 000000000..d2f6667ad Binary files /dev/null and b/current/_static/images/tour/tour-options-menu.png differ diff --git a/current/_static/images/tour/tour-plots.png b/current/_static/images/tour/tour-plots.png new file mode 100644 index 000000000..365fc1c0b Binary files /dev/null and b/current/_static/images/tour/tour-plots.png differ diff --git a/current/_static/images/tour/tour-profiler.png b/current/_static/images/tour/tour-profiler.png new file mode 100644 index 000000000..bd2afe764 Binary files /dev/null and b/current/_static/images/tour/tour-profiler.png differ diff --git a/current/_static/images/tour/tour-variable-explorer.png b/current/_static/images/tour/tour-variable-explorer.png new file mode 100644 index 000000000..d6ee27953 Binary files /dev/null and b/current/_static/images/tour/tour-variable-explorer.png differ diff --git a/current/_static/language_data.js b/current/_static/language_data.js index 863704b31..367b8ed81 100644 --- a/current/_static/language_data.js +++ b/current/_static/language_data.js @@ -5,15 +5,15 @@ * This script contains the language-specific data used by searchtools.js, * namely the list of stopwords, stemmer, scorer and splitter. * - * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ -var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"]; +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 */ +/* Non-minified version is copied as a separate JS file, if available */ /** * Porter Stemmer @@ -197,101 +197,3 @@ var Stemmer = function() { } } - - - -var splitChars = (function() { - var result = {}; - var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648, - 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702, - 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971, - 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345, - 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761, - 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823, - 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125, - 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695, - 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587, - 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141]; - var i, j, start, end; - for (i = 0; i < singles.length; i++) { - result[singles[i]] = true; - } - var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709], - [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161], - [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568], - [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807], - [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047], - [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383], - [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450], - [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547], - [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673], - [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820], - [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946], - [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023], - [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173], - [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332], - [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481], - [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718], - [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791], - [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095], - [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205], - [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687], - [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968], - [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869], - [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102], - [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271], - [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592], - [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822], - [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167], - [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959], - [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143], - [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318], - [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483], - [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101], - [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567], - [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292], - [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444], - [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783], - [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311], - [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511], - [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774], - [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071], - [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263], - [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519], - [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647], - [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967], - [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295], - [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274], - [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007], - [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381], - [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]]; - for (i = 0; i < ranges.length; i++) { - start = ranges[i][0]; - end = ranges[i][1]; - for (j = start; j <= end; j++) { - result[j] = true; - } - } - return result; -})(); - -function splitQuery(query) { - var result = []; - var start = -1; - for (var i = 0; i < query.length; i++) { - if (splitChars[query.charCodeAt(i)]) { - if (start !== -1) { - result.push(query.slice(start, i)); - start = -1; - } - } else if (start === -1) { - start = i; - } - } - if (start !== -1) { - result.push(query.slice(start)); - } - return result; -} - - diff --git a/current/_static/pygments.css b/current/_static/pygments.css index 0d49244ed..012e6a00a 100644 --- a/current/_static/pygments.css +++ b/current/_static/pygments.css @@ -1,75 +1,152 @@ -pre { line-height: 125%; } -td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } -span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } -td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -.highlight .hll { background-color: #ffffcc } -.highlight { background: #eeffcc; } -.highlight .c { color: #408090; font-style: italic } /* Comment */ -.highlight .err { border: 1px solid #FF0000 } /* Error */ -.highlight .k { color: #007020; font-weight: bold } /* Keyword */ -.highlight .o { color: #666666 } /* Operator */ -.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ -.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #007020 } /* Comment.Preproc */ -.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ -.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ -.highlight .gd { color: #A00000 } /* Generic.Deleted */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ -.highlight .gr { color: #FF0000 } /* Generic.Error */ -.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.highlight .gi { color: #00A000 } /* Generic.Inserted */ -.highlight .go { color: #333333 } /* Generic.Output */ -.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #0044DD } /* Generic.Traceback */ -.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #007020 } /* Keyword.Pseudo */ -.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #902000 } /* Keyword.Type */ -.highlight .m { color: #208050 } /* Literal.Number */ -.highlight .s { color: #4070a0 } /* Literal.String */ -.highlight .na { color: #4070a0 } /* Name.Attribute */ -.highlight .nb { color: #007020 } /* Name.Builtin */ -.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ -.highlight .no { color: #60add5 } /* Name.Constant */ -.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ -.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ -.highlight .ne { color: #007020 } /* Name.Exception */ -.highlight .nf { color: #06287e } /* Name.Function */ -.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ -.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ -.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #bb60d5 } /* Name.Variable */ -.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mb { color: #208050 } /* Literal.Number.Bin */ -.highlight .mf { color: #208050 } /* Literal.Number.Float */ -.highlight .mh { color: #208050 } /* Literal.Number.Hex */ -.highlight .mi { color: #208050 } /* Literal.Number.Integer */ -.highlight .mo { color: #208050 } /* Literal.Number.Oct */ -.highlight .sa { color: #4070a0 } /* Literal.String.Affix */ -.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ -.highlight .sc { color: #4070a0 } /* Literal.String.Char */ -.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */ -.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ -.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ -.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ -.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ -.highlight .sx { color: #c65d09 } /* Literal.String.Other */ -.highlight .sr { color: #235388 } /* Literal.String.Regex */ -.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ -.highlight .ss { color: #517918 } /* Literal.String.Symbol */ -.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ -.highlight .fm { color: #06287e } /* Name.Function.Magic */ -.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ -.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ -.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ -.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */ -.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file +html[data-theme="light"] .highlight pre { line-height: 125%; } +html[data-theme="light"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight .hll { background-color: #fae4c2 } +html[data-theme="light"] .highlight { background: #fefefe; color: #080808 } +html[data-theme="light"] .highlight .c { color: #515151 } /* Comment */ +html[data-theme="light"] .highlight .err { color: #a12236 } /* Error */ +html[data-theme="light"] .highlight .k { color: #6730c5 } /* Keyword */ +html[data-theme="light"] .highlight .l { color: #7f4707 } /* Literal */ +html[data-theme="light"] .highlight .n { color: #080808 } /* Name */ +html[data-theme="light"] .highlight .o { color: #00622f } /* Operator */ +html[data-theme="light"] .highlight .p { color: #080808 } /* Punctuation */ +html[data-theme="light"] .highlight .ch { color: #515151 } /* Comment.Hashbang */ +html[data-theme="light"] .highlight .cm { color: #515151 } /* Comment.Multiline */ +html[data-theme="light"] .highlight .cp { color: #515151 } /* Comment.Preproc */ +html[data-theme="light"] .highlight .cpf { color: #515151 } /* Comment.PreprocFile */ +html[data-theme="light"] .highlight .c1 { color: #515151 } /* Comment.Single */ +html[data-theme="light"] .highlight .cs { color: #515151 } /* Comment.Special */ +html[data-theme="light"] .highlight .gd { color: #005b82 } /* Generic.Deleted */ +html[data-theme="light"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="light"] .highlight .gh { color: #005b82 } /* Generic.Heading */ +html[data-theme="light"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="light"] .highlight .gu { color: #005b82 } /* Generic.Subheading */ +html[data-theme="light"] .highlight .kc { color: #6730c5 } /* Keyword.Constant */ +html[data-theme="light"] .highlight .kd { color: #6730c5 } /* Keyword.Declaration */ +html[data-theme="light"] .highlight .kn { color: #6730c5 } /* Keyword.Namespace */ +html[data-theme="light"] .highlight .kp { color: #6730c5 } /* Keyword.Pseudo */ +html[data-theme="light"] .highlight .kr { color: #6730c5 } /* Keyword.Reserved */ +html[data-theme="light"] .highlight .kt { color: #7f4707 } /* Keyword.Type */ +html[data-theme="light"] .highlight .ld { color: #7f4707 } /* Literal.Date */ +html[data-theme="light"] .highlight .m { color: #7f4707 } /* Literal.Number */ +html[data-theme="light"] .highlight .s { color: #00622f } /* Literal.String */ +html[data-theme="light"] .highlight .na { color: #912583 } /* Name.Attribute */ +html[data-theme="light"] .highlight .nb { color: #7f4707 } /* Name.Builtin */ +html[data-theme="light"] .highlight .nc { color: #005b82 } /* Name.Class */ +html[data-theme="light"] .highlight .no { color: #005b82 } /* Name.Constant */ +html[data-theme="light"] .highlight .nd { color: #7f4707 } /* Name.Decorator */ +html[data-theme="light"] .highlight .ni { color: #00622f } /* Name.Entity */ +html[data-theme="light"] .highlight .ne { color: #6730c5 } /* Name.Exception */ +html[data-theme="light"] .highlight .nf { color: #005b82 } /* Name.Function */ +html[data-theme="light"] .highlight .nl { color: #7f4707 } /* Name.Label */ +html[data-theme="light"] .highlight .nn { color: #080808 } /* Name.Namespace */ +html[data-theme="light"] .highlight .nx { color: #080808 } /* Name.Other */ +html[data-theme="light"] .highlight .py { color: #005b82 } /* Name.Property */ +html[data-theme="light"] .highlight .nt { color: #005b82 } /* Name.Tag */ +html[data-theme="light"] .highlight .nv { color: #a12236 } /* Name.Variable */ +html[data-theme="light"] .highlight .ow { color: #6730c5 } /* Operator.Word */ +html[data-theme="light"] .highlight .pm { color: #080808 } /* Punctuation.Marker */ +html[data-theme="light"] .highlight .w { color: #080808 } /* Text.Whitespace */ +html[data-theme="light"] .highlight .mb { color: #7f4707 } /* Literal.Number.Bin */ +html[data-theme="light"] .highlight .mf { color: #7f4707 } /* Literal.Number.Float */ +html[data-theme="light"] .highlight .mh { color: #7f4707 } /* Literal.Number.Hex */ +html[data-theme="light"] .highlight .mi { color: #7f4707 } /* Literal.Number.Integer */ +html[data-theme="light"] .highlight .mo { color: #7f4707 } /* Literal.Number.Oct */ +html[data-theme="light"] .highlight .sa { color: #00622f } /* Literal.String.Affix */ +html[data-theme="light"] .highlight .sb { color: #00622f } /* Literal.String.Backtick */ +html[data-theme="light"] .highlight .sc { color: #00622f } /* Literal.String.Char */ +html[data-theme="light"] .highlight .dl { color: #00622f } /* Literal.String.Delimiter */ +html[data-theme="light"] .highlight .sd { color: #00622f } /* Literal.String.Doc */ +html[data-theme="light"] .highlight .s2 { color: #00622f } /* Literal.String.Double */ +html[data-theme="light"] .highlight .se { color: #00622f } /* Literal.String.Escape */ +html[data-theme="light"] .highlight .sh { color: #00622f } /* Literal.String.Heredoc */ +html[data-theme="light"] .highlight .si { color: #00622f } /* Literal.String.Interpol */ +html[data-theme="light"] .highlight .sx { color: #00622f } /* Literal.String.Other */ +html[data-theme="light"] .highlight .sr { color: #a12236 } /* Literal.String.Regex */ +html[data-theme="light"] .highlight .s1 { color: #00622f } /* Literal.String.Single */ +html[data-theme="light"] .highlight .ss { color: #005b82 } /* Literal.String.Symbol */ +html[data-theme="light"] .highlight .bp { color: #7f4707 } /* Name.Builtin.Pseudo */ +html[data-theme="light"] .highlight .fm { color: #005b82 } /* Name.Function.Magic */ +html[data-theme="light"] .highlight .vc { color: #a12236 } /* Name.Variable.Class */ +html[data-theme="light"] .highlight .vg { color: #a12236 } /* Name.Variable.Global */ +html[data-theme="light"] .highlight .vi { color: #a12236 } /* Name.Variable.Instance */ +html[data-theme="light"] .highlight .vm { color: #7f4707 } /* Name.Variable.Magic */ +html[data-theme="light"] .highlight .il { color: #7f4707 } /* Literal.Number.Integer.Long */ +html[data-theme="dark"] .highlight pre { line-height: 125%; } +html[data-theme="dark"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight .hll { background-color: #ffd9002e } +html[data-theme="dark"] .highlight { background: #2b2b2b; color: #f8f8f2 } +html[data-theme="dark"] .highlight .c { color: #ffd900 } /* Comment */ +html[data-theme="dark"] .highlight .err { color: #ffa07a } /* Error */ +html[data-theme="dark"] .highlight .k { color: #dcc6e0 } /* Keyword */ +html[data-theme="dark"] .highlight .l { color: #ffd900 } /* Literal */ +html[data-theme="dark"] .highlight .n { color: #f8f8f2 } /* Name */ +html[data-theme="dark"] .highlight .o { color: #abe338 } /* Operator */ +html[data-theme="dark"] .highlight .p { color: #f8f8f2 } /* Punctuation */ +html[data-theme="dark"] .highlight .ch { color: #ffd900 } /* Comment.Hashbang */ +html[data-theme="dark"] .highlight .cm { color: #ffd900 } /* Comment.Multiline */ +html[data-theme="dark"] .highlight .cp { color: #ffd900 } /* Comment.Preproc */ +html[data-theme="dark"] .highlight .cpf { color: #ffd900 } /* Comment.PreprocFile */ +html[data-theme="dark"] .highlight .c1 { color: #ffd900 } /* Comment.Single */ +html[data-theme="dark"] .highlight .cs { color: #ffd900 } /* Comment.Special */ +html[data-theme="dark"] .highlight .gd { color: #00e0e0 } /* Generic.Deleted */ +html[data-theme="dark"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="dark"] .highlight .gh { color: #00e0e0 } /* Generic.Heading */ +html[data-theme="dark"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="dark"] .highlight .gu { color: #00e0e0 } /* Generic.Subheading */ +html[data-theme="dark"] .highlight .kc { color: #dcc6e0 } /* Keyword.Constant */ +html[data-theme="dark"] .highlight .kd { color: #dcc6e0 } /* Keyword.Declaration */ +html[data-theme="dark"] .highlight .kn { color: #dcc6e0 } /* Keyword.Namespace */ +html[data-theme="dark"] .highlight .kp { color: #dcc6e0 } /* Keyword.Pseudo */ +html[data-theme="dark"] .highlight .kr { color: #dcc6e0 } /* Keyword.Reserved */ +html[data-theme="dark"] .highlight .kt { color: #ffd900 } /* Keyword.Type */ +html[data-theme="dark"] .highlight .ld { color: #ffd900 } /* Literal.Date */ +html[data-theme="dark"] .highlight .m { color: #ffd900 } /* Literal.Number */ +html[data-theme="dark"] .highlight .s { color: #abe338 } /* Literal.String */ +html[data-theme="dark"] .highlight .na { color: #ffd900 } /* Name.Attribute */ +html[data-theme="dark"] .highlight .nb { color: #ffd900 } /* Name.Builtin */ +html[data-theme="dark"] .highlight .nc { color: #00e0e0 } /* Name.Class */ +html[data-theme="dark"] .highlight .no { color: #00e0e0 } /* Name.Constant */ +html[data-theme="dark"] .highlight .nd { color: #ffd900 } /* Name.Decorator */ +html[data-theme="dark"] .highlight .ni { color: #abe338 } /* Name.Entity */ +html[data-theme="dark"] .highlight .ne { color: #dcc6e0 } /* Name.Exception */ +html[data-theme="dark"] .highlight .nf { color: #00e0e0 } /* Name.Function */ +html[data-theme="dark"] .highlight .nl { color: #ffd900 } /* Name.Label */ +html[data-theme="dark"] .highlight .nn { color: #f8f8f2 } /* Name.Namespace */ +html[data-theme="dark"] .highlight .nx { color: #f8f8f2 } /* Name.Other */ +html[data-theme="dark"] .highlight .py { color: #00e0e0 } /* Name.Property */ +html[data-theme="dark"] .highlight .nt { color: #00e0e0 } /* Name.Tag */ +html[data-theme="dark"] .highlight .nv { color: #ffa07a } /* Name.Variable */ +html[data-theme="dark"] .highlight .ow { color: #dcc6e0 } /* Operator.Word */ +html[data-theme="dark"] .highlight .pm { color: #f8f8f2 } /* Punctuation.Marker */ +html[data-theme="dark"] .highlight .w { color: #f8f8f2 } /* Text.Whitespace */ +html[data-theme="dark"] .highlight .mb { color: #ffd900 } /* Literal.Number.Bin */ +html[data-theme="dark"] .highlight .mf { color: #ffd900 } /* Literal.Number.Float */ +html[data-theme="dark"] .highlight .mh { color: #ffd900 } /* Literal.Number.Hex */ +html[data-theme="dark"] .highlight .mi { color: #ffd900 } /* Literal.Number.Integer */ +html[data-theme="dark"] .highlight .mo { color: #ffd900 } /* Literal.Number.Oct */ +html[data-theme="dark"] .highlight .sa { color: #abe338 } /* Literal.String.Affix */ +html[data-theme="dark"] .highlight .sb { color: #abe338 } /* Literal.String.Backtick */ +html[data-theme="dark"] .highlight .sc { color: #abe338 } /* Literal.String.Char */ +html[data-theme="dark"] .highlight .dl { color: #abe338 } /* Literal.String.Delimiter */ +html[data-theme="dark"] .highlight .sd { color: #abe338 } /* Literal.String.Doc */ +html[data-theme="dark"] .highlight .s2 { color: #abe338 } /* Literal.String.Double */ +html[data-theme="dark"] .highlight .se { color: #abe338 } /* Literal.String.Escape */ +html[data-theme="dark"] .highlight .sh { color: #abe338 } /* Literal.String.Heredoc */ +html[data-theme="dark"] .highlight .si { color: #abe338 } /* Literal.String.Interpol */ +html[data-theme="dark"] .highlight .sx { color: #abe338 } /* Literal.String.Other */ +html[data-theme="dark"] .highlight .sr { color: #ffa07a } /* Literal.String.Regex */ +html[data-theme="dark"] .highlight .s1 { color: #abe338 } /* Literal.String.Single */ +html[data-theme="dark"] .highlight .ss { color: #00e0e0 } /* Literal.String.Symbol */ +html[data-theme="dark"] .highlight .bp { color: #ffd900 } /* Name.Builtin.Pseudo */ +html[data-theme="dark"] .highlight .fm { color: #00e0e0 } /* Name.Function.Magic */ +html[data-theme="dark"] .highlight .vc { color: #ffa07a } /* Name.Variable.Class */ +html[data-theme="dark"] .highlight .vg { color: #ffa07a } /* Name.Variable.Global */ +html[data-theme="dark"] .highlight .vi { color: #ffa07a } /* Name.Variable.Instance */ +html[data-theme="dark"] .highlight .vm { color: #ffd900 } /* Name.Variable.Magic */ +html[data-theme="dark"] .highlight .il { color: #ffd900 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/current/_static/scripts/bootstrap.js b/current/_static/scripts/bootstrap.js new file mode 100644 index 000000000..c8178debb --- /dev/null +++ b/current/_static/scripts/bootstrap.js @@ -0,0 +1,3 @@ +/*! For license information please see bootstrap.js.LICENSE.txt */ +(()=>{"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{afterMain:()=>E,afterRead:()=>v,afterWrite:()=>C,applyStyles:()=>$,arrow:()=>J,auto:()=>a,basePlacements:()=>l,beforeMain:()=>y,beforeRead:()=>_,beforeWrite:()=>A,bottom:()=>s,clippingParents:()=>d,computeStyles:()=>it,createPopper:()=>Dt,createPopperBase:()=>St,createPopperLite:()=>$t,detectOverflow:()=>_t,end:()=>h,eventListeners:()=>st,flip:()=>bt,hide:()=>wt,left:()=>r,main:()=>w,modifierPhases:()=>O,offset:()=>Et,placements:()=>g,popper:()=>f,popperGenerator:()=>Lt,popperOffsets:()=>At,preventOverflow:()=>Tt,read:()=>b,reference:()=>p,right:()=>o,start:()=>c,top:()=>n,variationPlacements:()=>m,viewport:()=>u,write:()=>T});var i={};t.r(i),t.d(i,{Alert:()=>Oe,Button:()=>ke,Carousel:()=>li,Collapse:()=>Ei,Dropdown:()=>Ki,Modal:()=>Ln,Offcanvas:()=>Kn,Popover:()=>bs,ScrollSpy:()=>Ls,Tab:()=>Js,Toast:()=>po,Tooltip:()=>fs});var n="top",s="bottom",o="right",r="left",a="auto",l=[n,s,o,r],c="start",h="end",d="clippingParents",u="viewport",f="popper",p="reference",m=l.reduce((function(t,e){return t.concat([e+"-"+c,e+"-"+h])}),[]),g=[].concat(l,[a]).reduce((function(t,e){return t.concat([e,e+"-"+c,e+"-"+h])}),[]),_="beforeRead",b="read",v="afterRead",y="beforeMain",w="main",E="afterMain",A="beforeWrite",T="write",C="afterWrite",O=[_,b,v,y,w,E,A,T,C];function x(t){return t?(t.nodeName||"").toLowerCase():null}function k(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function L(t){return t instanceof k(t).Element||t instanceof Element}function S(t){return t instanceof k(t).HTMLElement||t instanceof HTMLElement}function D(t){return"undefined"!=typeof ShadowRoot&&(t instanceof k(t).ShadowRoot||t instanceof ShadowRoot)}const $={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];S(s)&&x(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}),{});S(n)&&x(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function I(t){return t.split("-")[0]}var N=Math.max,P=Math.min,M=Math.round;function j(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function F(){return!/^((?!chrome|android).)*safari/i.test(j())}function H(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&S(t)&&(s=t.offsetWidth>0&&M(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&M(n.height)/t.offsetHeight||1);var r=(L(t)?k(t):window).visualViewport,a=!F()&&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 B(t){var e=H(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function W(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&D(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function z(t){return k(t).getComputedStyle(t)}function R(t){return["table","td","th"].indexOf(x(t))>=0}function q(t){return((L(t)?t.ownerDocument:t.document)||window.document).documentElement}function V(t){return"html"===x(t)?t:t.assignedSlot||t.parentNode||(D(t)?t.host:null)||q(t)}function Y(t){return S(t)&&"fixed"!==z(t).position?t.offsetParent:null}function K(t){for(var e=k(t),i=Y(t);i&&R(i)&&"static"===z(i).position;)i=Y(i);return i&&("html"===x(i)||"body"===x(i)&&"static"===z(i).position)?e:i||function(t){var e=/firefox/i.test(j());if(/Trident/i.test(j())&&S(t)&&"fixed"===z(t).position)return null;var i=V(t);for(D(i)&&(i=i.host);S(i)&&["html","body"].indexOf(x(i))<0;){var n=z(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Q(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function X(t,e,i){return N(t,P(e,i))}function U(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function G(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const J={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,a=t.name,c=t.options,h=i.elements.arrow,d=i.modifiersData.popperOffsets,u=I(i.placement),f=Q(u),p=[r,o].indexOf(u)>=0?"height":"width";if(h&&d){var m=function(t,e){return U("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:G(t,l))}(c.padding,i),g=B(h),_="y"===f?n:r,b="y"===f?s:o,v=i.rects.reference[p]+i.rects.reference[f]-d[f]-i.rects.popper[p],y=d[f]-i.rects.reference[f],w=K(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=X(T,O,C),k=f;i.modifiersData[a]=((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)))&&W(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Z(t){return t.split("-")[1]}var tt={top:"auto",right:"auto",bottom:"auto",left:"auto"};function et(t){var e,i=t.popper,a=t.popperRect,l=t.placement,c=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=r,C=n,O=window;if(p){var x=K(i),L="clientHeight",S="clientWidth";x===k(i)&&"static"!==z(x=q(i)).position&&"absolute"===u&&(L="scrollHeight",S="scrollWidth"),(l===n||(l===r||l===o)&&c===h)&&(C=s,y-=(g&&x===O&&O.visualViewport?O.visualViewport.height:x[L])-a.height,y*=f?1:-1),l!==r&&(l!==n&&l!==s||c!==h)||(T=o,b-=(g&&x===O&&O.visualViewport?O.visualViewport.width:x[S])-a.width,b*=f?1:-1)}var D,$=Object.assign({position:u},p&&tt),I=!0===m?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:M(i*s)/s||0,y:M(n*s)/s||0}}({x:b,y},k(i)):{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 it={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:I(e.placement),variation:Z(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,et(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,et(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 nt={passive:!0};const st={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=k(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,nt)})),a&&l.addEventListener("resize",i.update,nt),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,nt)})),a&&l.removeEventListener("resize",i.update,nt)}},data:{}};var ot={left:"right",right:"left",bottom:"top",top:"bottom"};function rt(t){return t.replace(/left|right|bottom|top/g,(function(t){return ot[t]}))}var at={start:"end",end:"start"};function lt(t){return t.replace(/start|end/g,(function(t){return at[t]}))}function ct(t){var e=k(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ht(t){return H(q(t)).left+ct(t).scrollLeft}function dt(t){var e=z(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function ut(t){return["html","body","#document"].indexOf(x(t))>=0?t.ownerDocument.body:S(t)&&dt(t)?t:ut(V(t))}function ft(t,e){var i;void 0===e&&(e=[]);var n=ut(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=k(n),r=s?[o].concat(o.visualViewport||[],dt(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(ft(V(r)))}function pt(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function mt(t,e,i){return e===u?pt(function(t,e){var i=k(t),n=q(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=F();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+ht(t),y:l}}(t,i)):L(e)?function(t,e){var i=H(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):pt(function(t){var e,i=q(t),n=ct(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=N(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=N(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ht(t),l=-n.scrollTop;return"rtl"===z(s||i).direction&&(a+=N(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(q(t)))}function gt(t){var e,i=t.reference,a=t.element,l=t.placement,d=l?I(l):null,u=l?Z(l):null,f=i.x+i.width/2-a.width/2,p=i.y+i.height/2-a.height/2;switch(d){case n:e={x:f,y:i.y-a.height};break;case s:e={x:f,y:i.y+i.height};break;case o:e={x:i.x+i.width,y:p};break;case r:e={x:i.x-a.width,y:p};break;default:e={x:i.x,y:i.y}}var m=d?Q(d):null;if(null!=m){var g="y"===m?"height":"width";switch(u){case c:e[m]=e[m]-(i[g]/2-a[g]/2);break;case h:e[m]=e[m]+(i[g]/2-a[g]/2)}}return e}function _t(t,e){void 0===e&&(e={});var i=e,r=i.placement,a=void 0===r?t.placement:r,c=i.strategy,h=void 0===c?t.strategy:c,m=i.boundary,g=void 0===m?d:m,_=i.rootBoundary,b=void 0===_?u:_,v=i.elementContext,y=void 0===v?f:v,w=i.altBoundary,E=void 0!==w&&w,A=i.padding,T=void 0===A?0:A,C=U("number"!=typeof T?T:G(T,l)),O=y===f?p:f,k=t.rects.popper,D=t.elements[E?O:y],$=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=ft(V(t)),i=["absolute","fixed"].indexOf(z(t).position)>=0&&S(t)?K(t):t;return L(i)?e.filter((function(t){return L(t)&&W(t,i)&&"body"!==x(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=mt(t,i,n);return e.top=N(s.top,e.top),e.right=P(s.right,e.right),e.bottom=P(s.bottom,e.bottom),e.left=N(s.left,e.left),e}),mt(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}(L(D)?D:D.contextElement||q(t.elements.popper),g,b,h),I=H(t.elements.reference),M=gt({reference:I,element:k,strategy:"absolute",placement:a}),j=pt(Object.assign({},k,M)),F=y===f?j:I,B={top:$.top-F.top+C.top,bottom:F.bottom-$.bottom+C.bottom,left:$.left-F.left+C.left,right:F.right-$.right+C.right},R=t.modifiersData.offset;if(y===f&&R){var Y=R[a];Object.keys(B).forEach((function(t){var e=[o,s].indexOf(t)>=0?1:-1,i=[n,s].indexOf(t)>=0?"y":"x";B[t]+=Y[i]*e}))}return B}const bt={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,h=t.name;if(!e.modifiersData[h]._skip){for(var d=i.mainAxis,u=void 0===d||d,f=i.altAxis,p=void 0===f||f,_=i.fallbackPlacements,b=i.padding,v=i.boundary,y=i.rootBoundary,w=i.altBoundary,E=i.flipVariations,A=void 0===E||E,T=i.allowedAutoPlacements,C=e.options.placement,O=I(C),x=_||(O!==C&&A?function(t){if(I(t)===a)return[];var e=rt(t);return[lt(t),e,lt(e)]}(C):[rt(C)]),k=[C].concat(x).reduce((function(t,i){return t.concat(I(i)===a?function(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,c=i.allowedAutoPlacements,h=void 0===c?g:c,d=Z(n),u=d?a?m:m.filter((function(t){return Z(t)===d})):l,f=u.filter((function(t){return h.indexOf(t)>=0}));0===f.length&&(f=u);var p=f.reduce((function(e,i){return e[i]=_t(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[I(i)],e}),{});return Object.keys(p).sort((function(t,e){return p[t]-p[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,$=!0,N=k[0],P=0;P=0,B=H?"width":"height",W=_t(e,{placement:M,boundary:v,rootBoundary:y,altBoundary:w,padding:b}),z=H?F?o:r:F?s:n;L[B]>S[B]&&(z=rt(z));var R=rt(z),q=[];if(u&&q.push(W[j]<=0),p&&q.push(W[z]<=0,W[R]<=0),q.every((function(t){return t}))){N=M,$=!1;break}D.set(M,q)}if($)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 vt(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 yt(t){return[n,o,s,r].some((function(e){return t[e]>=0}))}const wt={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=_t(e,{elementContext:"reference"}),a=_t(e,{altBoundary:!0}),l=vt(r,n),c=vt(a,s,o),h=yt(l),d=yt(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})}},Et={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,s=t.name,a=i.offset,l=void 0===a?[0,0]:a,c=g.reduce((function(t,i){return t[i]=function(t,e,i){var s=I(t),a=[r,n].indexOf(s)>=0?-1:1,l="function"==typeof i?i(Object.assign({},e,{placement:t})):i,c=l[0],h=l[1];return c=c||0,h=(h||0)*a,[r,o].indexOf(s)>=0?{x:h,y:c}:{x:c,y:h}}(i,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[s]=c}},At={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=gt({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},Tt={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,a=t.name,l=i.mainAxis,h=void 0===l||l,d=i.altAxis,u=void 0!==d&&d,f=i.boundary,p=i.rootBoundary,m=i.altBoundary,g=i.padding,_=i.tether,b=void 0===_||_,v=i.tetherOffset,y=void 0===v?0:v,w=_t(e,{boundary:f,rootBoundary:p,padding:g,altBoundary:m}),E=I(e.placement),A=Z(e.placement),T=!A,C=Q(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),$=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,M={x:0,y:0};if(x){if(h){var j,F="y"===C?n:r,H="y"===C?s:o,W="y"===C?"height":"width",z=x[C],R=z+w[F],q=z-w[H],V=b?-L[W]/2:0,Y=A===c?k[W]:L[W],U=A===c?-L[W]:-k[W],G=e.elements.arrow,J=b&&G?B(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[H],nt=X(0,k[W],J[W]),st=T?k[W]/2-V-nt-et-D.mainAxis:Y-nt-et-D.mainAxis,ot=T?-k[W]/2+V+nt+it+D.mainAxis:U+nt+it+D.mainAxis,rt=e.elements.arrow&&K(e.elements.arrow),at=rt?"y"===C?rt.clientTop||0:rt.clientLeft||0:0,lt=null!=(j=null==$?void 0:$[C])?j:0,ct=z+ot-lt,ht=X(b?P(R,z+st-lt-at):R,z,b?N(q,ct):q);x[C]=ht,M[C]=ht-z}if(u){var dt,ut="x"===C?n:r,ft="x"===C?s:o,pt=x[O],mt="y"===O?"height":"width",gt=pt+w[ut],bt=pt-w[ft],vt=-1!==[n,r].indexOf(E),yt=null!=(dt=null==$?void 0:$[O])?dt:0,wt=vt?gt: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=X(t,e,i);return n>i?i:n}(wt,pt,Et):X(b?wt:gt,pt,b?Et:bt);x[O]=At,M[O]=At-pt}e.modifiersData[a]=M}},requiresIfExists:["offset"]};function Ct(t,e,i){void 0===i&&(i=!1);var n,s,o=S(e),r=S(e)&&function(t){var e=t.getBoundingClientRect(),i=M(e.width)/t.offsetWidth||1,n=M(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=q(e),l=H(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==x(e)||dt(a))&&(c=(n=e)!==k(n)&&S(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:ct(n)),S(e)?((h=H(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=ht(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function Ot(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 xt={placement:"bottom",modifiers:[],strategy:"absolute"};function kt(){for(var t=arguments.length,e=new Array(t),i=0;iIt.has(t)&&It.get(t).get(e)||null,remove(t,e){if(!It.has(t))return;const i=It.get(t);i.delete(e),0===i.size&&It.delete(t)}},Pt="transitionend",Mt=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),jt=t=>{t.dispatchEvent(new Event(Pt))},Ft=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),Ht=t=>Ft(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(Mt(t)):null,Bt=t=>{if(!Ft(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},Wt=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),zt=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?zt(t.parentNode):null},Rt=()=>{},qt=t=>{t.offsetHeight},Vt=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,Yt=[],Kt=()=>"rtl"===document.documentElement.dir,Qt=t=>{var e;e=()=>{const e=Vt();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?(Yt.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of Yt)t()})),Yt.push(e)):e()},Xt=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,Ut=(t,e,i=!0)=>{if(!i)return void Xt(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(Pt,o),Xt(t))};e.addEventListener(Pt,o),setTimeout((()=>{s||jt(e)}),n)},Gt=(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))])},Jt=/[^.]*(?=\..*)\.|.*/,Zt=/\..*/,te=/::\d+$/,ee={};let ie=1;const ne={mouseenter:"mouseover",mouseleave:"mouseout"},se=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 oe(t,e){return e&&`${e}::${ie++}`||t.uidEvent||ie++}function re(t){const e=oe(t);return t.uidEvent=e,ee[e]=ee[e]||{},ee[e]}function ae(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function le(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=ue(t);return se.has(o)||(o=t),[n,s,o]}function ce(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=le(e,i,n);if(e in ne){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=re(t),c=l[a]||(l[a]={}),h=ae(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=oe(r,e.replace(Jt,"")),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 pe(s,{delegateTarget:r}),n.oneOff&&fe.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return pe(n,{delegateTarget:t}),i.oneOff&&fe.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 he(t,e,i,n,s){const o=ae(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function de(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&he(t,e,i,r.callable,r.delegationSelector)}function ue(t){return t=t.replace(Zt,""),ne[t]||t}const fe={on(t,e,i,n){ce(t,e,i,n,!1)},one(t,e,i,n){ce(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=le(e,i,n),a=r!==e,l=re(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))de(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(te,"");a&&!e.includes(s)||he(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;he(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=Vt();let s=null,o=!0,r=!0,a=!1;e!==ue(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=pe(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function pe(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 me(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 ge(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const _e={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${ge(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${ge(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]=me(t.dataset[n])}return e},getDataAttribute:(t,e)=>me(t.getAttribute(`data-bs-${ge(e)}`))};class be{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=Ft(e)?_e.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...Ft(e)?_e.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=Ft(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 ve extends be{constructor(t,e){super(),(t=Ht(t))&&(this._element=t,this._config=this._getConfig(e),Nt.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Nt.remove(this._element,this.constructor.DATA_KEY),fe.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){Ut(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return Nt.get(Ht(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.3"}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 ye=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?i.trim():null}return e?e.split(",").map((t=>Mt(t))).join(","):null},we={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=>!Wt(t)&&Bt(t)))},getSelectorFromElement(t){const e=ye(t);return e&&we.findOne(e)?e:null},getElementFromSelector(t){const e=ye(t);return e?we.findOne(e):null},getMultipleElementsFromSelector(t){const e=ye(t);return e?we.find(e):[]}},Ee=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;fe.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),Wt(this))return;const s=we.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},Ae=".bs.alert",Te=`close${Ae}`,Ce=`closed${Ae}`;class Oe extends ve{static get NAME(){return"alert"}close(){if(fe.trigger(this._element,Te).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(),fe.trigger(this._element,Ce),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Oe.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)}}))}}Ee(Oe,"close"),Qt(Oe);const xe='[data-bs-toggle="button"]';class ke extends ve{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=ke.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}fe.on(document,"click.bs.button.data-api",xe,(t=>{t.preventDefault();const e=t.target.closest(xe);ke.getOrCreateInstance(e).toggle()})),Qt(ke);const Le=".bs.swipe",Se=`touchstart${Le}`,De=`touchmove${Le}`,$e=`touchend${Le}`,Ie=`pointerdown${Le}`,Ne=`pointerup${Le}`,Pe={endCallback:null,leftCallback:null,rightCallback:null},Me={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class je extends be{constructor(t,e){super(),this._element=t,t&&je.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return Pe}static get DefaultType(){return Me}static get NAME(){return"swipe"}dispose(){fe.off(this._element,Le)}_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(),Xt(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&&Xt(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(fe.on(this._element,Ie,(t=>this._start(t))),fe.on(this._element,Ne,(t=>this._end(t))),this._element.classList.add("pointer-event")):(fe.on(this._element,Se,(t=>this._start(t))),fe.on(this._element,De,(t=>this._move(t))),fe.on(this._element,$e,(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 Fe=".bs.carousel",He=".data-api",Be="ArrowLeft",We="ArrowRight",ze="next",Re="prev",qe="left",Ve="right",Ye=`slide${Fe}`,Ke=`slid${Fe}`,Qe=`keydown${Fe}`,Xe=`mouseenter${Fe}`,Ue=`mouseleave${Fe}`,Ge=`dragstart${Fe}`,Je=`load${Fe}${He}`,Ze=`click${Fe}${He}`,ti="carousel",ei="active",ii=".active",ni=".carousel-item",si=ii+ni,oi={[Be]:Ve,[We]:qe},ri={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},ai={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class li extends ve{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=we.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===ti&&this.cycle()}static get Default(){return ri}static get DefaultType(){return ai}static get NAME(){return"carousel"}next(){this._slide(ze)}nextWhenVisible(){!document.hidden&&Bt(this._element)&&this.next()}prev(){this._slide(Re)}pause(){this._isSliding&&jt(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?fe.one(this._element,Ke,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void fe.one(this._element,Ke,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?ze:Re;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&&fe.on(this._element,Qe,(t=>this._keydown(t))),"hover"===this._config.pause&&(fe.on(this._element,Xe,(()=>this.pause())),fe.on(this._element,Ue,(()=>this._maybeEnableCycle()))),this._config.touch&&je.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of we.find(".carousel-item img",this._element))fe.on(t,Ge,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(qe)),rightCallback:()=>this._slide(this._directionToOrder(Ve)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new je(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=oi[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=we.findOne(ii,this._indicatorsElement);e.classList.remove(ei),e.removeAttribute("aria-current");const i=we.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(ei),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===ze,s=e||Gt(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>fe.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(Ye).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),qt(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(ei),i.classList.remove(ei,c,l),this._isSliding=!1,r(Ke)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return we.findOne(si,this._element)}_getItems(){return we.find(ni,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return Kt()?t===qe?Re:ze:t===qe?ze:Re}_orderToDirection(t){return Kt()?t===Re?qe:Ve:t===Re?Ve:qe}static jQueryInterface(t){return this.each((function(){const e=li.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)}))}}fe.on(document,Ze,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=we.getElementFromSelector(this);if(!e||!e.classList.contains(ti))return;t.preventDefault();const i=li.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===_e.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),fe.on(window,Je,(()=>{const t=we.find('[data-bs-ride="carousel"]');for(const e of t)li.getOrCreateInstance(e)})),Qt(li);const ci=".bs.collapse",hi=`show${ci}`,di=`shown${ci}`,ui=`hide${ci}`,fi=`hidden${ci}`,pi=`click${ci}.data-api`,mi="show",gi="collapse",_i="collapsing",bi=`:scope .${gi} .${gi}`,vi='[data-bs-toggle="collapse"]',yi={parent:null,toggle:!0},wi={parent:"(null|element)",toggle:"boolean"};class Ei extends ve{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=we.find(vi);for(const t of i){const e=we.getSelectorFromElement(t),i=we.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 yi}static get DefaultType(){return wi}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=>Ei.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(fe.trigger(this._element,hi).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(gi),this._element.classList.add(_i),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(_i),this._element.classList.add(gi,mi),this._element.style[e]="",fe.trigger(this._element,di)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(fe.trigger(this._element,ui).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,qt(this._element),this._element.classList.add(_i),this._element.classList.remove(gi,mi);for(const t of this._triggerArray){const e=we.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(_i),this._element.classList.add(gi),fe.trigger(this._element,fi)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(mi)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=Ht(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(vi);for(const e of t){const t=we.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=we.find(bi,this._config.parent);return we.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=Ei.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}fe.on(document,pi,vi,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of we.getMultipleElementsFromSelector(this))Ei.getOrCreateInstance(t,{toggle:!1}).toggle()})),Qt(Ei);const Ai="dropdown",Ti=".bs.dropdown",Ci=".data-api",Oi="ArrowUp",xi="ArrowDown",ki=`hide${Ti}`,Li=`hidden${Ti}`,Si=`show${Ti}`,Di=`shown${Ti}`,$i=`click${Ti}${Ci}`,Ii=`keydown${Ti}${Ci}`,Ni=`keyup${Ti}${Ci}`,Pi="show",Mi='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',ji=`${Mi}.${Pi}`,Fi=".dropdown-menu",Hi=Kt()?"top-end":"top-start",Bi=Kt()?"top-start":"top-end",Wi=Kt()?"bottom-end":"bottom-start",zi=Kt()?"bottom-start":"bottom-end",Ri=Kt()?"left-start":"right-start",qi=Kt()?"right-start":"left-start",Vi={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},Yi={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Ki extends ve{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=we.next(this._element,Fi)[0]||we.prev(this._element,Fi)[0]||we.findOne(Fi,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Vi}static get DefaultType(){return Yi}static get NAME(){return Ai}toggle(){return this._isShown()?this.hide():this.show()}show(){if(Wt(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!fe.trigger(this._element,Si,t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const t of[].concat(...document.body.children))fe.on(t,"mouseover",Rt);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Pi),this._element.classList.add(Pi),fe.trigger(this._element,Di,t)}}hide(){if(Wt(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(!fe.trigger(this._element,ki,t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.off(t,"mouseover",Rt);this._popper&&this._popper.destroy(),this._menu.classList.remove(Pi),this._element.classList.remove(Pi),this._element.setAttribute("aria-expanded","false"),_e.removeDataAttribute(this._menu,"popper"),fe.trigger(this._element,Li,t)}}_getConfig(t){if("object"==typeof(t=super._getConfig(t)).reference&&!Ft(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${Ai.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:Ft(this._config.reference)?t=Ht(this._config.reference):"object"==typeof this._config.reference&&(t=this._config.reference);const i=this._getPopperConfig();this._popper=Dt(t,this._menu,i)}_isShown(){return this._menu.classList.contains(Pi)}_getPlacement(){const t=this._parent;if(t.classList.contains("dropend"))return Ri;if(t.classList.contains("dropstart"))return qi;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?Bi:Hi:e?zi:Wi}_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)&&(_e.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...Xt(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=we.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>Bt(t)));i.length&&Gt(i,e,t===xi,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=Ki.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=we.find(ji);for(const i of e){const e=Ki.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=[Oi,xi].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Mi)?this:we.prev(this,Mi)[0]||we.next(this,Mi)[0]||we.findOne(Mi,t.delegateTarget.parentNode),o=Ki.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}fe.on(document,Ii,Mi,Ki.dataApiKeydownHandler),fe.on(document,Ii,Fi,Ki.dataApiKeydownHandler),fe.on(document,$i,Ki.clearMenus),fe.on(document,Ni,Ki.clearMenus),fe.on(document,$i,Mi,(function(t){t.preventDefault(),Ki.getOrCreateInstance(this).toggle()})),Qt(Ki);const Qi="backdrop",Xi="show",Ui=`mousedown.bs.${Qi}`,Gi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Ji={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Zi extends be{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Gi}static get DefaultType(){return Ji}static get NAME(){return Qi}show(t){if(!this._config.isVisible)return void Xt(t);this._append();const e=this._getElement();this._config.isAnimated&&qt(e),e.classList.add(Xi),this._emulateAnimation((()=>{Xt(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Xi),this._emulateAnimation((()=>{this.dispose(),Xt(t)}))):Xt(t)}dispose(){this._isAppended&&(fe.off(this._element,Ui),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=Ht(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),fe.on(t,Ui,(()=>{Xt(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){Ut(t,this._getElement(),this._config.isAnimated)}}const tn=".bs.focustrap",en=`focusin${tn}`,nn=`keydown.tab${tn}`,sn="backward",on={autofocus:!0,trapElement:null},rn={autofocus:"boolean",trapElement:"element"};class an extends be{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return on}static get DefaultType(){return rn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),fe.off(document,tn),fe.on(document,en,(t=>this._handleFocusin(t))),fe.on(document,nn,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,fe.off(document,tn))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=we.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===sn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?sn:"forward")}}const ln=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",cn=".sticky-top",hn="padding-right",dn="margin-right";class un{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,hn,(e=>e+t)),this._setElementAttributes(ln,hn,(e=>e+t)),this._setElementAttributes(cn,dn,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,hn),this._resetElementAttributes(ln,hn),this._resetElementAttributes(cn,dn)}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&&_e.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=_e.getDataAttribute(t,e);null!==i?(_e.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(Ft(t))e(t);else for(const i of we.find(t,this._element))e(i)}}const fn=".bs.modal",pn=`hide${fn}`,mn=`hidePrevented${fn}`,gn=`hidden${fn}`,_n=`show${fn}`,bn=`shown${fn}`,vn=`resize${fn}`,yn=`click.dismiss${fn}`,wn=`mousedown.dismiss${fn}`,En=`keydown.dismiss${fn}`,An=`click${fn}.data-api`,Tn="modal-open",Cn="show",On="modal-static",xn={backdrop:!0,focus:!0,keyboard:!0},kn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Ln extends ve{constructor(t,e){super(t,e),this._dialog=we.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new un,this._addEventListeners()}static get Default(){return xn}static get DefaultType(){return kn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||fe.trigger(this._element,_n,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(Tn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(fe.trigger(this._element,pn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Cn),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){fe.off(window,fn),fe.off(this._dialog,fn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Zi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new an({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=we.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),qt(this._element),this._element.classList.add(Cn),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,fe.trigger(this._element,bn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){fe.on(this._element,En,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),fe.on(window,vn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),fe.on(this._element,wn,(t=>{fe.one(this._element,yn,(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(Tn),this._resetAdjustments(),this._scrollBar.reset(),fe.trigger(this._element,gn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(fe.trigger(this._element,mn).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(On)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(On),this._queueCallback((()=>{this._element.classList.remove(On),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=Kt()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=Kt()?"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=Ln.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}fe.on(document,An,'[data-bs-toggle="modal"]',(function(t){const e=we.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),fe.one(e,_n,(t=>{t.defaultPrevented||fe.one(e,gn,(()=>{Bt(this)&&this.focus()}))}));const i=we.findOne(".modal.show");i&&Ln.getInstance(i).hide(),Ln.getOrCreateInstance(e).toggle(this)})),Ee(Ln),Qt(Ln);const Sn=".bs.offcanvas",Dn=".data-api",$n=`load${Sn}${Dn}`,In="show",Nn="showing",Pn="hiding",Mn=".offcanvas.show",jn=`show${Sn}`,Fn=`shown${Sn}`,Hn=`hide${Sn}`,Bn=`hidePrevented${Sn}`,Wn=`hidden${Sn}`,zn=`resize${Sn}`,Rn=`click${Sn}${Dn}`,qn=`keydown.dismiss${Sn}`,Vn={backdrop:!0,keyboard:!0,scroll:!1},Yn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Kn extends ve{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Vn}static get DefaultType(){return Yn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||fe.trigger(this._element,jn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new un).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Nn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(In),this._element.classList.remove(Nn),fe.trigger(this._element,Fn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(fe.trigger(this._element,Hn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(Pn),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(In,Pn),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new un).reset(),fe.trigger(this._element,Wn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Zi({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():fe.trigger(this._element,Bn)}:null})}_initializeFocusTrap(){return new an({trapElement:this._element})}_addEventListeners(){fe.on(this._element,qn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():fe.trigger(this._element,Bn))}))}static jQueryInterface(t){return this.each((function(){const e=Kn.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)}}))}}fe.on(document,Rn,'[data-bs-toggle="offcanvas"]',(function(t){const e=we.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),Wt(this))return;fe.one(e,Wn,(()=>{Bt(this)&&this.focus()}));const i=we.findOne(Mn);i&&i!==e&&Kn.getInstance(i).hide(),Kn.getOrCreateInstance(e).toggle(this)})),fe.on(window,$n,(()=>{for(const t of we.find(Mn))Kn.getOrCreateInstance(t).show()})),fe.on(window,zn,(()=>{for(const t of we.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&Kn.getOrCreateInstance(t).hide()})),Ee(Kn),Qt(Kn);const Qn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],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:[]},Xn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Un=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Gn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Xn.has(i)||Boolean(Un.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Jn={allowList:Qn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
    "},Zn={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},ts={entry:"(string|element|function|null)",selector:"(string|element)"};class es extends be{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Jn}static get DefaultType(){return Zn}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},ts)}_setContent(t,e,i){const n=we.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?Ft(e)?this._putElementInTemplate(Ht(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)Gn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return Xt(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const is=new Set(["sanitize","allowList","sanitizeFn"]),ns="fade",ss="show",os=".tooltip-inner",rs=".modal",as="hide.bs.modal",ls="hover",cs="focus",hs={AUTO:"auto",TOP:"top",RIGHT:Kt()?"left":"right",BOTTOM:"bottom",LEFT:Kt()?"right":"left"},ds={allowList:Qn,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"},us={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 fs extends ve{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 ds}static get DefaultType(){return us}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),fe.off(this._element.closest(rs),as,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=fe.trigger(this._element,this.constructor.eventName("show")),e=(zt(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),fe.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(ss),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.on(t,"mouseover",Rt);this._queueCallback((()=>{fe.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!fe.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(ss),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.off(t,"mouseover",Rt);this._activeTrigger.click=!1,this._activeTrigger[cs]=!1,this._activeTrigger[ls]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),fe.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(ns,ss),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(ns),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new es({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[os]: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(ns)}_isShown(){return this.tip&&this.tip.classList.contains(ss)}_createPopper(t){const e=Xt(this._config.placement,[this,t,this._element]),i=hs[e.toUpperCase()];return Dt(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 Xt(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,...Xt(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)fe.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ls?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ls?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");fe.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?cs:ls]=!0,e._enter()})),fe.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?cs:ls]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},fe.on(this._element.closest(rs),as,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=_e.getDataAttributes(this._element);for(const t of Object.keys(e))is.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:Ht(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=fs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Qt(fs);const ps=".popover-header",ms=".popover-body",gs={...fs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},_s={...fs.DefaultType,content:"(null|string|element|function)"};class bs extends fs{static get Default(){return gs}static get DefaultType(){return _s}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[ps]:this._getTitle(),[ms]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=bs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Qt(bs);const vs=".bs.scrollspy",ys=`activate${vs}`,ws=`click${vs}`,Es=`load${vs}.data-api`,As="active",Ts="[href]",Cs=".nav-link",Os=`${Cs}, .nav-item > ${Cs}, .list-group-item`,xs={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},ks={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Ls extends ve{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 xs}static get DefaultType(){return ks}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=Ht(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&&(fe.off(this._config.target,ws),fe.on(this._config.target,ws,Ts,(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=we.find(Ts,this._config.target);for(const e of t){if(!e.hash||Wt(e))continue;const t=we.findOne(decodeURI(e.hash),this._element);Bt(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(As),this._activateParents(t),fe.trigger(this._element,ys,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))we.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(As);else for(const e of we.parents(t,".nav, .list-group"))for(const t of we.prev(e,Os))t.classList.add(As)}_clearActiveClass(t){t.classList.remove(As);const e=we.find(`${Ts}.${As}`,t);for(const t of e)t.classList.remove(As)}static jQueryInterface(t){return this.each((function(){const e=Ls.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]()}}))}}fe.on(window,Es,(()=>{for(const t of we.find('[data-bs-spy="scroll"]'))Ls.getOrCreateInstance(t)})),Qt(Ls);const Ss=".bs.tab",Ds=`hide${Ss}`,$s=`hidden${Ss}`,Is=`show${Ss}`,Ns=`shown${Ss}`,Ps=`click${Ss}`,Ms=`keydown${Ss}`,js=`load${Ss}`,Fs="ArrowLeft",Hs="ArrowRight",Bs="ArrowUp",Ws="ArrowDown",zs="Home",Rs="End",qs="active",Vs="fade",Ys="show",Ks=".dropdown-toggle",Qs=`:not(${Ks})`,Xs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Us=`.nav-link${Qs}, .list-group-item${Qs}, [role="tab"]${Qs}, ${Xs}`,Gs=`.${qs}[data-bs-toggle="tab"], .${qs}[data-bs-toggle="pill"], .${qs}[data-bs-toggle="list"]`;class Js extends ve{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),fe.on(this._element,Ms,(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?fe.trigger(e,Ds,{relatedTarget:t}):null;fe.trigger(t,Is,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(qs),this._activate(we.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),fe.trigger(t,Ns,{relatedTarget:e})):t.classList.add(Ys)}),t,t.classList.contains(Vs)))}_deactivate(t,e){t&&(t.classList.remove(qs),t.blur(),this._deactivate(we.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),fe.trigger(t,$s,{relatedTarget:e})):t.classList.remove(Ys)}),t,t.classList.contains(Vs)))}_keydown(t){if(![Fs,Hs,Bs,Ws,zs,Rs].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!Wt(t)));let i;if([zs,Rs].includes(t.key))i=e[t.key===zs?0:e.length-1];else{const n=[Hs,Ws].includes(t.key);i=Gt(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Js.getOrCreateInstance(i).show())}_getChildren(){return we.find(Us,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=we.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=we.findOne(t,i);s&&s.classList.toggle(n,e)};n(Ks,qs),n(".dropdown-menu",Ys),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(qs)}_getInnerElement(t){return t.matches(Us)?t:we.findOne(Us,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Js.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}fe.on(document,Ps,Xs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),Wt(this)||Js.getOrCreateInstance(this).show()})),fe.on(window,js,(()=>{for(const t of we.find(Gs))Js.getOrCreateInstance(t)})),Qt(Js);const Zs=".bs.toast",to=`mouseover${Zs}`,eo=`mouseout${Zs}`,io=`focusin${Zs}`,no=`focusout${Zs}`,so=`hide${Zs}`,oo=`hidden${Zs}`,ro=`show${Zs}`,ao=`shown${Zs}`,lo="hide",co="show",ho="showing",uo={animation:"boolean",autohide:"boolean",delay:"number"},fo={animation:!0,autohide:!0,delay:5e3};class po extends ve{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return fo}static get DefaultType(){return uo}static get NAME(){return"toast"}show(){fe.trigger(this._element,ro).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(lo),qt(this._element),this._element.classList.add(co,ho),this._queueCallback((()=>{this._element.classList.remove(ho),fe.trigger(this._element,ao),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(fe.trigger(this._element,so).defaultPrevented||(this._element.classList.add(ho),this._queueCallback((()=>{this._element.classList.add(lo),this._element.classList.remove(ho,co),fe.trigger(this._element,oo)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(co),super.dispose()}isShown(){return this._element.classList.contains(co)}_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(){fe.on(this._element,to,(t=>this._onInteraction(t,!0))),fe.on(this._element,eo,(t=>this._onInteraction(t,!1))),fe.on(this._element,io,(t=>this._onInteraction(t,!0))),fe.on(this._element,no,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=po.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}function mo(t){"loading"!=document.readyState?t():document.addEventListener("DOMContentLoaded",t)}Ee(po),Qt(po),mo((function(){[].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')).map((function(t){return new fs(t,{delay:{show:500,hide:100}})}))})),mo((function(){document.getElementById("pst-back-to-top").addEventListener("click",(function(){document.body.scrollTop=0,document.documentElement.scrollTop=0}))})),mo((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}))})),window.bootstrap=i})(); +//# sourceMappingURL=bootstrap.js.map \ No newline at end of file diff --git a/current/_static/scripts/bootstrap.js.LICENSE.txt b/current/_static/scripts/bootstrap.js.LICENSE.txt new file mode 100644 index 000000000..28755c2c5 --- /dev/null +++ b/current/_static/scripts/bootstrap.js.LICENSE.txt @@ -0,0 +1,5 @@ +/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ diff --git a/current/_static/scripts/bootstrap.js.map b/current/_static/scripts/bootstrap.js.map new file mode 100644 index 000000000..e9e815891 --- /dev/null +++ b/current/_static/scripts/bootstrap.js.map @@ -0,0 +1 @@ +{"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.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 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};\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.3';\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 !== '#' ? hrefAttribute.trim() : null;\n }\n return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null;\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};\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};\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 dd: [],\n div: [],\n dl: [],\n dt: [],\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

    Spyder and Spyder-Kernels version compatibility#

    Spyder

    Spyder-Kernels

    ` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-` - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    + +
    + +
    + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Frequently Asked Questions

    -
    -

    Installing and updating

    -
    + + -
    + - -
    - -
    - -
    - - - - -
    - -
    -
    -
    -
    +
    + + +
    +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/genindex.html b/current/genindex.html index 9f69853ad..6fc5d3922 100644 --- a/current/genindex.html +++ b/current/genindex.html @@ -1,572 +1,418 @@ - - + + + Index — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - - - +
    - - - - - - -
    - -
    -
    + +
    +

    Index

    @@ -589,124 +435,74 @@

    P

    -
    + -
    - - -
    -
    - -
    - -
    - + + +
    + +
    - -
    -
    + +
    + - -
    - -
    +
    - +
    + +
    + + + + + + + - - - - - Open chat - - - - - + \ No newline at end of file diff --git a/current/index.html b/current/index.html index a6ad29e59..bf81517e6 100644 --- a/current/index.html +++ b/current/index.html @@ -1,873 +1,644 @@ - - + + + - + + Welcome to Spyder’s Documentation — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    + +
    + +
    + + + + +
    +
    - - - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Welcome to Spyder’s Documentation

    + +
    + +
    +

    Welcome to Spyder’s Documentation#

    Screenshot of the Spyder main window, with the default panel layout

    Spyder is a powerful scientific environment written in Python, for Python, and designed by and for scientists, engineers and data analysts. It features a unique combination of the advanced editing, analysis, debugging, and profiling functionality of a comprehensive development tool with the data exploration, interactive execution, deep inspection, and beautiful visualization capabilities of a scientific package.

    -
    -

    Where to go now?

    +
    +

    Where to go now?#

    Spyder’s documentation provides a variety of resources that will help you learn how to use the application and explore each one of its panes. These include video tutorials, in-depth descriptions and how-to guides covering a wide range of needs and experience levels with Spyder.

    -
    -
    -
    -
    -
    +
    +
    +
    +
    +
    -

    If you are looking for a summary of its features and interface, check out the Quickstart.

    +

    If you are looking for a summary of its features and interface, check out the Tour.

    -
    -
    -
    +
    +
    +
    -

    If you don’t have Spyder installed and want to get started, follow the Installation Guide.

    +

    If you don’t have Spyder installed and want to get started, follow the Install Guide.

    -
    -
    -
    +
    +
    +
    -

    If you are completely new to Spyder, watch our basic tutorial series, First Steps with Spyder.

    +

    If you are completely new to Spyder, watch our basic tutorial series, First Steps with Spyder.

    -
    -
    -
    +
    +
    +
    -

    If you are familiar with Spyder and want to explore the functionality of its panes in more detail, go to Panes in Depth.

    +

    If you are familiar with Spyder and want to explore the functionality of its panes in more detail, go to Panes.

    -
    -
    -
    +
    +
    +
    -

    If you’ve run into a Spyder problem and need help solving it, take a look at our troubleshooting guide.

    +

    If you’ve run into a Spyder problem and need help solving it, take a look at our troubleshooting guide.

    -
    -
    -
    +
    +
    +
    -

    If you have a question about Spyder, visit the Frequently Asked Questions section.

    +

    If you have a question about Spyder, visit the Frequently Asked Questions section.

    -
    -
    -

    Join our community

    +
    +
    +

    Join our community#

    Spyder is open source software, which means that is free for everyone to use and anyone can contribute to it. We encourage everyone to become a part of our community and help develop Spyder!

    -
    -

    Looking to contribute your code?

    +
    +

    Looking to contribute your code?#

    Spyder is written in the same Python language that you use it to develop, so its easy to get started contributing to it. You can follow our contributing guide to set up a development environment, and you can get involved with the project through our Github repository. The easiest way to get started is helping us resolve items on our issue tracker, either by fixing bugs in Spyder, or helping users troubleshoot their problems (which doesn’t require writing any code).

    -
    -
    -

    Want to help writing docs?

    +
    +
    +

    Want to help writing docs?#

    We welcome your contributions of corrections, additions and enhancements to these docs. Check out the docs contributing guide to learn how to submit a PR with your changes on our docs repo.

    -
    -
    -

    Interested in translating Spyder?

    +
    +
    +

    Interested in translating Spyder?#

    In order to reach more users around the world in need of a powerful scientific Python environment, we welcome your help translating the documentation and the interface into different languages.

    For this purpose we use Crowdin, which provides a simple web based interface for translators, proofreaders and managers, so everyone can help us translate Spyder into any language.

    -
    -
    -

    Want to be part of our social media?

    + +
    +

    Want to be part of our social media?#

    Connect with Spyder through our social media channels to stay up to date with our current developments!

    -
    -
    -
    + + + -
    + -
    - - Quickstart - -
    - - - - +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/installation.html b/current/installation.html index 05d975aa1..2904fa419 100644 --- a/current/installation.html +++ b/current/installation.html @@ -1,620 +1,499 @@ - - + + + - - Installation Guide — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + Install Guide — Spyder 5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Installation Guide

    + +
    + +
    +

    Install Guide#

    Spyder is relatively easy to install on Windows, Linux and macOS. Just make sure to read and follow these instructions with care.

    If you run into problems, before posting a report, please consult our comprehensive troubleshooting guide and search the issue tracker for your error message and problem description. These methods generally fix or isolate the great majority of install-related difficulties. Thanks!

    -
    +

    Note

    For most users on Windows and macOS, we recommend our Standalone installers as the most straightforward and robust option to obtain Spyder. For users needing Linux support, third-party Spyder plugins or Variable Explorer compatibility with custom-installed packages—all capabilities which the standalone installers currently do not yet provide—we advise using a Conda-based distributions. Linux, plugin and package/environment management support in the standalone installers are currently under active development for future Spyder versions.

    -
    -

    Try Spyder online

    +
    +

    Try Spyder online#

    Want to try out Spyder without installing it? With Binder you can work with a fully functional copy of Spyder online that runs right in your web browser, no installation needed. Visit the Spyder Binder to get started using Spyder.

    Spyder running on Binder -
    -
    -

    Standalone installers

    +
    +
    +

    Standalone installers#

    The standalone installers are our recommended method for most users on Windows and macOS, with experimental Linux support under active development. They work like any other IDE, where Spyder can be installed and updated independently of the Python environments you use to run your code. This avoids the problems with incompatible packages and broken installations users often face when mixing Spyder with the (Conda, etc) environments they use to run their code.

    The installers include a built-in Python environment with the most common scientific libraries (e.g. NumPy, Pandas, Matpotlib, etc), which can be used out of the box for basic data analysis tasks. However, to manage your own packages and environments, you’ll currently need to connect an external Python distribution (such as Anaconda, Miniconda, Miniforge/Mambaforge, WinPython or Python.org) to your standalone copy of Spyder. For more information on this, see our FAQ entry on the subject.

    -
    +

    Note

    The standalone installers do not yet support installing third-party Spyder plugins not already bundled with them, though this feature is currently under development. For now, if you need this capability, we recommend a Conda-based distributions.

    -
    -

    Downloading and installing

    +
    +

    Downloading and installing#

    To download the supported Spyder installer for your platform, simply click the appropriate link below (for Linux, see the Conda-based distributions section). Then, double-click the downloaded file to open the installer. If a security warning pops up, you may need to click Yes, OK, Open, Allow or similar.

    On Windows, if a “SmartScreen” dialog appears, click More info followed by Run anyway, and then proceed through the steps in the installer.

    On macOS, open the disk image and drag Spyder to your Applications folder.

    - ----- +
    @@ -622,38 +501,39 @@

    Topics

    Windows

    macOS M1

    -
    +
    +

    Note

    “Lite” versions of both installers are also available from the releases page, which are somewhat smaller than the full installers. These lack a number of optional but recommended dependencies, such as NumPy, SciPy and Pandas, meaning that a few Variable Explorer features, including graphical data import wizards and support for rich display and editing of NumPy arrays and Pandas DataFrames, will not be available. Given this only saves a modest amount of space while missing out on significant features, we recommend using the full installers unless minimizing download/install size and memory usage is a priority.

    -
    -
    -

    Running from a standalone install

    +
    +
    +

    Running from a standalone install#

    To run Spyder when installed standalone, you can simply use your operating system’s typical method of launching applications, such as opening it from the Start menu on Windows (or the Taskbar, if you’ve pinned it there), or from Launchpad, Spotlight or the Applications folder on macOS (or the Dock, if you’ve added it there).

    -
    -
    -

    Updating a standalone install

    + +
    +

    Updating a standalone install#

    By default, Spyder checks for updates automatically on startup, and you can also check manually with Help ‣ Check for updates. The standalone installers for Spyder 5.4.0+ include update functionality built right into Spyder, which after checking for updates will display a prompt to automatically download and install the current version. On earlier versions, you’ll need to manually download and install the latest release (if on Windows, make sure to remove the old version first from Control Panel/System Settings).

    -
    -
    -
    -

    Conda-based distributions

    + + +
    +

    Conda-based distributions#

    Spyder is included by default in the Anaconda Python distribution, which comes with everything you need to get started in an all-in-one package. It can also be easily installed in the much lighter-weight Miniconda and Miniforge/Mambaforge, which include just Python and the Conda/Mamba package and environment manager by default (with Miniforge defaulting to the Conda-Forge channel, and Mambaforge using Mamba, a much faster alternative to Conda). This is our recommended installation method on Linux and for users with third-party Spyder plugins, as support for both of these in our standalone installers is still under active development.

    -
    -

    Conda environment

    +
    +

    Conda environment#

    With Miniconda/Miniforge/Mambaforge, or to get a more reliable and up-to-date Spyder version with Anaconda, we strongly recommend installing Spyder into its own dedicated Conda environment.

    -
    +

    Note

    If using Mamba/Mambaforge, substitute mamba for conda in the following commands.

    -
    -

    Installing with Conda

    +
    +

    Installing with Conda#

    For a full install of Spyder and all optional dependencies, run the following command in your Anaconda Prompt (Windows) or terminal:

    conda create -c conda-forge -n spyder-env spyder numpy scipy pandas matplotlib sympy cython
     
    @@ -671,14 +551,14 @@

    Topics

    Here’s a summary of the main steps.

    Running Spyder installation with conda -
    -
    -

    Running with Conda

    +
    +
    +

    Running with Conda#

    You can then run Spyder by the same methods as with Anaconda, except that you need to make sure to launch the Start menu shortcut with (spyder-env) in the name, select the spyder-env environment on the left before launching it with Navigator, or type conda activate spyder-env before launching it on the command line.

    See our FAQ question for more information about how to use Spyder with your existing Conda environments.

    -
    -
    -

    Updating with Conda

    +
    +
    +

    Updating with Conda#

    With any Conda-based distribution and Spyder installed in its own environment (recommended), update Conda itself, active the environment, and finally update Spyder. In your system terminal (or Anaconda Prompt if on Windows), run:

    conda update -n base conda
    @@ -691,32 +571,32 @@ 

    Topics

    And then recreate a fresh one.

    -
    -
    -
    -

    Anaconda base

    + + +
    +

    Anaconda base#

    While we recommend always using a dedicated environment, with Anaconda you can also run the bundled copy of Spyder from the built-in base environment.

    -
    +

    Caution

    The bundled Spyder version can often be quite out of date, missing new features and bug fixes from the latest version, and if you install, change or remove other packages, there is a significant chance of dependency conflicts or a broken Spyder installation. Therefore, we recommend installing Spyder into a new Conda environment to avoid all these issues.

    -
    -

    Running with Anaconda

    +
    +

    Running with Anaconda#

    To run the bundled version of Spyder after installing it with Anaconda, the recommended method on Windows is to launch it via the Start menu shortcut. On other platforms, open Anaconda Navigator, scroll to Spyder under Home and click Launch.

    Anaconda Navigator showing Spyder

    If Spyder does not start via this method or you prefer to use the command line, open Anaconda Prompt (Windows) or your terminal (other platforms), type conda activate base then spyder.

    -
    -
    -

    Updating with Anaconda

    +
    +
    +

    Updating with Anaconda#

    With Spyder installed in Anaconda’s base environment, first update the anaconda meta-package, and then Spyder itself (in case there is a newer version than that pinned to the anaconda metapackage). In your system terminal (or Anaconda Prompt if on Windows), run:

    conda update anaconda
     conda install spyder=5.4.3
     
    -
    +

    Note

    These commands also update all your other packages, which is one reason we strongly recommend you use an isolated conda environment to avoid any potential unintended effects on other installed packages.

    @@ -725,19 +605,19 @@

    Topics

    conda install spyder
    -
    - - -
    -

    Using pip

    -
    + + + +
    +

    Using pip#

    +

    Caution

    While this installation method is a viable option for experienced users, installing Spyder (and other PyData-stack packages) with pip can sometimes lead to tricky issues, particularly on Windows and macOS. While you are welcome to try it on your own, we are typically not able to provide individual support for installation problems with pip, except to recommend our Standalone installers (Windows and macOS) or a Conda-based distributions.

    You can install Spyder with the pip package manager, which is included by default with most Python installations. Before installing Spyder itself by this method, you need to download the Python programming language.

    -
    +

    Note

    Due to a known issue with some DEB-based Linux distributions (Debian, Ubuntu, Mint), you might also need to install the pyqt5-dev-tools package first, with sudo apt install pyqt5-dev-tools.

    @@ -771,22 +651,22 @@

    Topics

    pip install --upgrade spyder
     
    -
    -
    -

    Alternative methods

    -
    +
    +
    +

    Alternative methods#

    +

    Caution

    While we describe alternative Spyder installation options for users who prefer them, as these are third-party distributions that we have no direct involvement in, we are usually not able to offer useful individual assistance for problems specific to installing via these alternative methods.

    Also, the Spyder versions they install may be out of date relative to the current release, and thus be missing the latest features and bug fixes.

    Therefore, we recommend you switch to our Standalone installers (Windows and macOS) or a Conda-based distributions if you encounter installation issues you are unable to solve on your own.

    -
    -

    Windows

    +
    +

    Windows#

    Spyder is included in the WinPython scientific Python distribution, along with many other common numerical computing and data analysis packages. You can use Spyder immediately after installing, similar to Anaconda.

    -
    -
    -

    macOS

    +
    +
    +

    macOS#

    Spyder is available as a cask through Homebrew.

    To install it using the brew package manager, run:

    brew install --cask spyder
    @@ -797,22 +677,22 @@ 

    Topics

    sudo port install py39-spyder
     
    -
    -
    -

    Linux

    +
    +
    +

    Linux#

    Spyder can be installed via third-party distro packages on most common Linux distributions.

    Running Spyder installed this way will generally be the same as any other distro-installed application. Alternatively, it can be launched from the terminal with spyder (or spyder3, on older versions of some distros).

    -
    -

    Ubuntu/Debian

    +
    +

    Ubuntu/Debian#

    Spyder is available as a Ubuntu package and a Debian package.

    To install it using the apt package manager, run:

    sudo apt install spyder
     
    -
    -
    -

    Other distributions

    +
    +
    +

    Other distributions#

    Spyder is also available in other GNU/Linux distributions, including:

    Please refer to the links or your distribution’s documentation for how to install Spyder.

    -
    -
    - -
    -

    Development builds

    + + + +
    +

    Development builds#

    If you want to try the next Spyder version before it is released, you can! You may want to do this for fixing bugs in Spyder, adding new features, learning how Spyder works or just getting a taste of what the IDE can do. For more information, please see the Contributing Guide included with the Spyder source or on Github, and for further detail consult the Spyder development wiki.

    -
    -
    -

    Additional help

    + +
    +

    Additional help#

    Run in to a problem installing or running Spyder? Read our Troubleshooting Guide.

    Looking for general information about Spyder and its ecosystem? See our main website.

    Need to submit a bug report or feature request? Check out our Github repository.

    @@ -839,281 +719,155 @@

    Topics

    Have a help request or discussion topic? Subscribe to our Google Group.

    Asking a quick question or want to chat with the dev team? Stop by our Gitter chatroom.

    Seeking personalized help from expert Spyder consultants? Visit OpenTeams.

    -
    - + + - + - - - - - + + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/objects.inv b/current/objects.inv index 19a6630f2..f1c683d3a 100644 Binary files a/current/objects.inv and b/current/objects.inv differ diff --git a/current/panes/debugging.html b/current/panes/debugging.html index 47bd49009..cc850e1b4 100644 --- a/current/panes/debugging.html +++ b/current/panes/debugging.html @@ -1,581 +1,484 @@ - - + + + - + + Debugger — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Debugger

    + +
    + +
    +

    Debugger#

    Debugging in Spyder is supported through integration with the enhanced ipdb debugger in the IPython Console. This allows breakpoints and the execution flow to be viewed and controlled right from the Spyder GUI, as well as with all the familiar IPython console commands.

    A Spyder IPython console window, showing the ipdb debugger in action -
    -

    Debugging with ipdb

    +
    +

    Debugging with ipdb#

    You can fully control debugger execution from the Debug menu, Debug toolbar and via configurable keyboard shortcuts, along with the standard ipdb console commands.

    A Spyder IPython console window, showing debugging from toolbar

    Additionally, the Editor shows the line of code the debugger is currently stopped on with an arrow.

    @@ -588,9 +491,9 @@

    Debugging with ipdb

    Finally, you can enter and execute multiline statements in Spyder’s debugger just like with the regular IPython prompt, to easily run complex code.

    Debugger showing multiline debugger -

    -
    +
    +

    Breakpoints#

    Spyder’s debugger is integrated with the Breakpoints pane, which lists the file, line, and condition (if any) of every breakpoint defined. To open it, select Debug ‣ List breakpoints, or press Ctrl-Shift-B (Cmd-Shift-B on macOS).

    Spyder's Breakpoints panel, with a number of examples showing file, line number and an optional condition @@ -605,9 +508,9 @@

    Debugging with ipdb

    You can access and edit local and global variables at each breakpoint through the Variable Explorer.

    Spyder's console and variable explorer showing local and global variables when debugging -

    -
    -

    Advanced features

    + +
    +

    Advanced features#

    You can avoid stepping through other Python packages while debugging by enabling the new Ignore Python libraries while debugging option in Spyder’s preferences, under IPython Console ‣ Debugger ‣ Debug. This will skip all the built-in and third-party Python modules you have installed.

    Spyder's preferences showing Ignore Python libraries while debugging options @@ -618,204 +521,141 @@

    Advanced featuresPreferences ‣ IPython Console ‣ Debugger ‣ Run code while debugging, and enter the code that you want to be executed with each step.

    Spyder's preferenes with debugging snippet -

    -
    -

    Matplotlib support

    + +
    +

    Matplotlib support#

    Generating Matplotlib figures is fully supported while the debugger is active, including all the different graphics backends. Use the %matplotlib magic to change to an interactive backend (e.g. %matplotlib qt5) to pan, zoom and adjust your plots in a separate window, or switch back to the default inline (%matplotlib inline) to see them displayed right in the Plots pane.

    Debugger showing matplotlib interactive backend

    To avoid showing plots while debugging, deactivate the Process execute events while debugging option in Preferences ‣ IPython console ‣ Debugger.

    -
    - -
    + + -
    + - - - -
    - -
    - - - - -
    - -
    -
    -
    -
    +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/panes/editor.html b/current/panes/editor.html index 56c4a9190..8c72eb5d1 100644 --- a/current/panes/editor.html +++ b/current/panes/editor.html @@ -1,582 +1,485 @@ - - + + + - + + Editor — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Editor

    + +
    + +
    +

    Editor#

    Spyder’s multi-language Editor pane is the key element of the IDE, where you can create, open, and modify source files. The Editor offers a variety of core features, such as autocompletion, real-time analysis, syntax highlighting, horizontal and vertical splitting, and much more. In addition, it integrates a number of powerful tools for an easy to use, efficient editing experience.

    Spyder's Editor pane, split horizontally and with style analysis -
    -

    Key components

    +
    +

    Key components#

    The Editor pane consists of the following areas:

    Spyder's Editor pane, showing its different areas (described below)
      @@ -589,55 +492,55 @@

      Key componentsBrowse tabs button (at left) to show every open tab and switch between them—which comes in handy if many are open.

    -
    -
    -

    Interface

    -
    -

    Tabs

    +
    +
    +

    Interface#

    +
    +

    Tabs#

    You can browse and navigate between open files in the Editor with tabs. Click the Browse tabs button on the left of the tab bar to display a list of open files, with the active tab checked.

    Spyder's Editor pane, showing the tabs browser

    Reorder files by dragging and dropping, or with Sort tabs alphabetically in the options menu, which also allows closing all tabs to the right of, or all tabs but the active one.

    Spyder's Editor pane, showing how to browse and sort open tabs alphabetically -
    -
    -

    File switcher

    + +
    +

    File switcher#

    The Editor features a file switcher, which enables you to navigate and switch between multiple open files. The file switcher is helpful for locating any file when there are several files opened.

    Spyder's Editor pane, showing the file switcher

    It can be accessed from the File ‣ File Switcher menu or Ctrl-P, and includes a search function. You can type in any part of an open file’s name and—if exists—it can be switched to by pressing Enter.

    Spyder's Editor pane, showing searching and switching to an existing file -
    -
    -

    Split panels

    + +
    +

    Split panels#

    The Editor can be split horizontally and vertically into as many distinct panels as desired. This allows viewing and editing the contents of several files (or different parts of the same file) at the same time.

    Spyder's Editor pane, showing how to split panels

    Split the Editor with the Split vertically (Ctrl-Shift-{) and Split horizontally (Ctrl-Shift--) commands in the options menu, and use Close this panel (Alt-Shift-W) to close the selected split panel.

    -
    +

    Note

    Close this panel closes a split panel, while Close hides the entire Editor pane (including all splits, which are restored when the Editor is re-opened).

    -
    -
    -
    -

    Editing features

    -
    -

    Syntax highlighting

    + + +
    +

    Editing features#

    +
    +

    Syntax highlighting#

    To improve the readability of your code, Spyder has a syntax highlighting feature that determines the color and style of text in the Editor, as well as in the IPython Console.

    You can configure and preview syntax highlighting themes and fonts under Preferences ‣ Appearance. The Syntax highlighting theme section allows you to change the color and style of the syntax elements and background to match your preferences. You can switch between available themes in the drop-down menu, modify the selected theme, create a new theme, and more. The Fonts section lets you change the text font and size.

    Spyder's Editor pane, showing how to switch between syntax highlighting themes -
    +

    Note

    Changes made to the syntax highlighting theme and font settings are common to all source files, regardless of their language.

    -
    -
    -

    Code cells

    +
    +
    +

    Code cells#

    A “code cell” in Spyder is a block of lines, typically in a script, that can be easily executed all at once in the current IPython Console. This is similar to “cell” behavior in Jupyter Notebook and MATLAB. You can divide your scripts into as many cells as needed, or none at all—the choice is yours.

    @@ -651,25 +554,25 @@

    Code cells% signs to the cell separator, e.g. # %%% to create a level 2 subsection, # %%%% for level 3, etc. This displays multiple levels in the Outline pane.

    Spyder outline pane, showing an example of sub sections -
    +

    Note

    This only affects how the cell is displayed in the Outline, and doesn’t affect running it in the Editor.

    To run the code in a cell, use Run ‣ Run cell, the Run cell button in the toolbar or the keyboard shortcut (Ctrl-Enter/Cmd-Return by default). You can also run a cell and then jump to the next one, letting you quickly step through multiple cells, using Run ‣ Run cell and advance (Shift-Enter by default).

    -
    -
    -

    Automatic formatting

    +

    +
    +

    Automatic formatting#

    The Editor has built-in support for automatically formatting your code using several popular tools, including Autopep8 and Black. The Format file or selection with {tool} command in the Source or context menu will format either the selected fragment (if text is selected) or the entire active file.

    Spyder Editor pane, showing an example of code selection formatting

    You can have the Editor automatically autoformat a file every time you save your work. To set this up, go to Preferences ‣ Completion and linting ‣ Code style and formatting ‣ Code formatting and check the Autoformat files on save option.

    Spyder's preferences dialog, showing checking the autoformat files on save setting -
    -
    -
    -

    Running code

    + + +
    +

    Running code#

    The Editor lets you run an entire file as well as specific lines, selections or cells.

    As your code is running,

      @@ -677,99 +580,99 @@

      Running codeVariable Explorer allows you to browse and interact with the objects generated.

    • The Plots pane renders the figures and images created.

    -
    -

    Run file

    +
    +

    Run file#

    Run an entire Editor file using the Run ‣ Run menu item, the Run file toolbar button or the F5 key. Use Run ‣ Re-Run last script to re-run the most recent file executed with the above.

    -
    -
    -

    Run line/selection

    +
    +
    +

    Run line/selection#

    You can execute the current line—or multiple selected lines—using the Run selection or current line option from the toolbar or the Run menu, as well as with the F9 key. After running the current line, the cursor automatically advances to the next one, so you can step through your code line by line. Unlike Run file, the executed lines are shown in the IPython Console.

    -
    -
    -

    Run cell

    + +
    +

    Run cell#

    To run a cell, place your cursor inside it and use the Run ‣ Run cell menu item, the Run current cell toolbar button or the Ctrl-Enter / Cmd-Return keyboard shortcut. Use Run cell and advance in the Run menu/toolbar or Shift-Enter to jump to the next cell after running, useful for stepping through cells quickly.

    -
    -
    -

    Run configuration

    + +
    +

    Run configuration#

    You can use the Run configuration per file dialog to set each file’s working directory, console mode (current, dedicated or external), command line arguments, execution options (clear all variables, run in an existing/empty namespace, debug on error), and more.

    Spyder's Editor pane, showing the Run Configuration dialog

    To access it, click Run ‣ Configuration per file… or press Ctrl-F6 / Cmd-F6.

    -
    -
    -
    -

    Code navigation

    -
    -

    Find and replace

    + + +
    +

    Code navigation#

    +
    +

    Find and replace#

    To search for text in the current file, use Search ‣ Find text or Ctrl-F / Cmd-F, and to replace it, use Search ‣ Replace text or Ctrl-R / Cmd-R. Typing your search string in the resulting panel below the Editor highlights each result and counts the total. Navigate between matches with the Find Previous and Find Next buttons in the find/replace panel, their corresponding entries in the Search menu, or use the F2 and F3 keys. Use the .* button to process search text as a regular expression, Aa to treat it as case-sensitive and [–] to only match whole words (e.g. for data, match data() but not dataframe).

    Spyder's Editor pane, showing the find and replace panel -
    -
    -

    Go to line

    + +
    +

    Go to line#

    The Go to line dialog allows jumping to a specific line in the active file. Open it with Search ‣ Go to line or Ctrl-L / Cmd-L, type the line number you want to scroll to and press Enter (or click OK).

    Spyder's Editor pane, showing the go to line feature

    It also shows the current line number and total line count in the file.

    -
    -
    -

    Class/function selector

    + +
    +

    Class/function selector#

    This panel, activated under Source ‣ Show selector for classes and functions, displays (as applicable) the name of the cell, function/method and class the Editor cursor is located inside. Use its dropdowns to view and jump to the functions, methods and classes in the current file.

    Spyder's Editor pane, showing the class and function selector panel -
    -
    -
    -

    Code analysis and completions

    + + +
    +

    Code analysis and completions#

    Spyder uses the Language Server Protocol (LSP) to provide code completion and linting for the Editor, similar to VSCode, Neovim, and other popular editors/IDEs.

    -
    +

    Note

    Many issues with completion and linting are outside of Spyder’s control, and are either limitations with the LSP or the code that is being introspected, but some can be worked around. See Completion/help not working for troubleshooting steps.

    Python is supported out of the box, and advanced users can add completion and linting support for other languages by setting up LSP servers for them under Preferences ‣ Completion and Linting ‣ Other languages.

    -
    -

    Code completion

    +
    +

    Code completion#

    Automatic code completion as you type is enabled by default in the Editor, and can also be triggered manually with Ctrl-Space/Cmd-Space, showing you possible completions (with pop-up help for each) and available code snippets. For example, typing cla will display the keyword class, the decorator classmethod and two built-in snippets with class templates. Select the desired completion with the arrow keys and Enter, or by double clicking.

    Spyder's Editor pane, showing a code completion example

    You can enable or disable on-the-fly code completion, as well as modify when it is triggered and what results are shown, under Preferences ‣ Completion and Linting ‣ General ‣ Completions. Spyder also allows you to define custom completion snippets to use, in addition to the ones offered by the LSP, under Preferences ‣ Completion and Linting ‣ Advanced.

    -
    -
    -

    Linting and code style

    +
    +
    +

    Linting and code style#

    Spyder can optionally highlight syntax errors, style issues, and other potential problems with your code in the Editor, which can help you spot bugs quickly and make your code easier to read and understand.

    Spyder's Editor pane, showing an example of a highlighted code error

    The Editor’s basic linting, powered by Pyflakes, warns of syntax errors and likely bugs in your code. It is on by default, and can be disabled or customized under Preferences ‣ Completion and Linting ‣ Linting.

    Spyder's preferences dialog, showing linting settings -

    Code style analysis, powered by Pycodestyle, flags deviations from the style conventions in PEP 8. +

    Code style analysis, powered by Pycodestyle, flags deviations from the style conventions in PEP 8. It is not active by default, but you can enable it and customize the Pycodestyle error codes shown with the options under Preferences ‣ Completion and Linting ‣ Code style and formatting ‣ Code Style.

    Spyder's preferences dialog, showing code style and formatting settings -
    -
    -

    Introspection features

    + +
    +

    Introspection features#

    If there’s a function, class or variable for which you would like to check its definition, you need to Ctrl/Cmd-click its name in the Editor (or click its name and press Ctrl-G / Cmd-G to jump to the file and line where it is declared.

    Spyder's Editor pane, showing the go to definition feature

    You can hover over the name of an object for pop-up help, as described in the Help pane docs.

    Spyder's Editor pane, showing an example of a hover hint

    Finally, if you type the name of a function, method or class constructor and then an open parenthesis, a calltip will pop up which shows the function’s parameters as you type them, as well as a summary of its documentation. These features can be enabled and customized under Preferences ‣ Completion and Linting ‣ Introspection.

    -
    -
    -
    -

    Keyboard shortcuts

    + + +
    +

    Keyboard shortcuts#

    To view the Editor’s primary keyboard shortcuts, consult its section under Help ‣ Shortcuts Summary. The full list can be browsed, searched and customized (on double-click) in Preferences ‣ Keyboard shortcuts.

    -
    - -
    + + - + -
    - - Debugger - Files - -
    - - -
    - -
    - - - - -
    - -
    -
    -
    - + + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/panes/fileexplorer.html b/current/panes/fileexplorer.html index af5c9c444..7a30ab488 100644 --- a/current/panes/fileexplorer.html +++ b/current/panes/fileexplorer.html @@ -1,581 +1,484 @@ - - + + + - + + Files — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Files

    + +
    + +
    +

    Files#

    The Files pane is a filesystem and directory browser built right into Spyder. You can view and filter files according to their type and extension, open them with the Editor or an external tool, and perform many common operations.

    Spyder Files pane, showing a tree view of files and metadata -
    -

    File operations

    +
    +

    File operations#

    To browse the files on your system, use the arrows at the top of the pane. You can expand/collapse the folders in the pane to display the files and subdirectories hierarchically. Double-clicking a folder will open it, showing the files inside and making it your working directory.

    @@ -586,15 +489,15 @@

    Files

    You can copy and paste one or several files to and from the pane, and copy their absolute or relative paths to the clipboard as text. If copying the paths for multiple files, they will be automatically formatted so you can paste them directly into a Python list.

    Spyder Files pane showing copying absolute path to Editor -

    -
    +
    +

    Version control support#

    The Files pane allows you to perform basic operations with the Git distributed version control system, like committing your changes and browsing the repository a given file or folder is part of. This is particularly useful when you’re working in Spyder Projects.

    Spyder Files pane showing committing change of file -
    -
    -

    Options menu

    + +
    +

    Options menu#

    The options menu in the top right of the Files pane offers several ways to customize how your files are displayed.

    By default, the pane displays the contents of your working directory without filtering. However, it can filter the list to show only files matching the patterns set under Show filenames with these extensions…, if you toggle the Filter filenames button in the pane toolbar.

    @@ -603,206 +506,143 @@

    Options menuType, Size and Date Modified columns using the corresponding menu options.

    Spyder Files pane showing columns checked and shown

    The menu also gives you the option to open files and directories with a single instead of a double click, to suit your preferences.

    -

    -
    -

    File associations

    + +
    +

    File associations#

    Files allows you to associate different external applications with specific file extensions they can open. Under the File associations tab of the Files preferences pane, you can add file types and set the external program used to open each of them by default.

    Spyder Files pane showing files associations

    Once you’ve set this up, files will automatically launch in the associated application when opened from Spyder’s Files pane. Additionally, when you right-click a file, you will find an Open with… option that will allow you to select from the applications associated with this extension.

    Spyder Files pane showing opening file with associated program -
    - -
    + + -
    + -
    - - Editor - Find - -
    - - -
    - -
    - - - - -
    - -
    -
    -
    -
    +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/panes/findinfiles.html b/current/panes/findinfiles.html index 583a1c83f..32f4604cd 100644 --- a/current/panes/findinfiles.html +++ b/current/panes/findinfiles.html @@ -1,580 +1,483 @@ - - + + + - + + Find — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - - -
    - -
    -
    -
    -

    Find

    + +
    + +
    +

    Find#

    The Find pane allows you to search the content of text files in a user-defined location, with advanced features to filter your results.

    Spyder Find in Files panel, with search results shown per-file -
    -

    Using the Find pane

    +
    +

    Using the Find pane#

    To search for text in the Find pane, enter it in the field in the top left and press the search button. This will allow you to view and navigate through all the occurrences of your search text in your working directory. You can expand or collapse the search results to view the matches in each file. @@ -584,9 +487,9 @@

    Using the Find paneClear the list option from the dropdown menu in the Search in field.

    Spyder Find pane showing choosing new directory and directory stored in the list -

    -
    +
    +

    Choosing search options#

    You can select from a number of options to enable searches as broad or refined as you need.

    To enable case sensitivity, which only returns matches with identical capitalization to your search text, toggle the Aa button on.

    Spyder Find pane showing search with case sensitive activated @@ -596,180 +499,131 @@

    Choosing search options

    Finally, to change the number of matches displayed, select the Set maximum number of results option under the pane’s Options menu in the top right.

    Spyder Find pane showing window with maximum results dialog open -

    - -
    + + -
    + -
    - - Files - Help - -
    - - -
    - -
    - - - - -
    - -
    -
    -
    -
    +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/panes/help.html b/current/panes/help.html index f32275402..2c85674a4 100644 --- a/current/panes/help.html +++ b/current/panes/help.html @@ -1,583 +1,487 @@ - - + + + - + + Help — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Help

    + +
    + +
    +

    Help#

    You can use the Help pane to find, render and display rich documentation for any object with a docstring, including modules, classes, functions and methods. This allows you to access documentation easily directly from Spyder, without having to interrupt your workflow.

    Spyder main window showing getting help for numpy arrays from editor

    You can also access Spyder’s tutorial from here, which will guide you through some basic steps for using its key features.

    -Spyder Help pane showing the link for the Spyder's tutorial -
    -

    Getting help

    +Spyder Help pane showing the link for the Spyder's tutorial + +
    +

    Getting help#

    Help can be retrieved both by static analysis of open files in the Editor, or by dynamically inspecting an object in an IPython Console. You can trigger help manually by pressing the configurable help shortcut (Ctrl-I by default).

    Spyder Editor and Help panes, with the latter displaying documentation for an object selected in the former. @@ -586,215 +490,152 @@

    Getting helpEditor and the Console under Preferences ‣ Help ‣ Automatic Connections, and turned on and off dynamically via the lock icon in the top right corner of the Help pane. If enabled, simply typing a left parenthesis (() after a function or method name will show its associated help.

    Spyder console and help pane showing automatic help with parenthesis -

    -
    +
    +

    Understanding help modes#

    You can use the options menu (Hamburger icon) in the top right of the Help pane to toggle the help display mode.

    Rich Text mode renders the object’s docstrings with Sphinx, Plain Text mode displays the docstring without formatting while Show Source displays the docstring inline with the code for the selected object, or any Python portion of it (if the object is not pure Python). The latter can be useful when docstrings are not available or insufficient to document the object.

    Spyder help pane showing different modes -
    -
    -

    Getting help by hovering

    + +
    +

    Getting help by hovering#

    You can also get summary help for objects by hovering over them in the Editor. Clicking the hover popup will open the full documentation in the Help pane.

    Editor pane showing help of an object from hover -
    -
    -

    Control automatic import

    + +
    +

    Control automatic import#

    When you get help in the IPython Console for an object that has not been previously imported, it is automatically loaded in Spyder’s own internal interpreter so that documentation can be shown when available. This can be disabled in the Help pane’s top-right options menu so that only documentation from imported objects is displayed.

    -
    - -
    + + -
    + -
    - - Find - History - -
    - - - -
    +
    +
    + +
    -
    -
    - Connect with us on: - - - GitHub - - - | - - Twitter - - - | - - Facebook - - - | - - YouTube - - - | - - Instagram - - - | - - Google Groups - -
    -
    -
    - - -
    - © 2009-2024 Spyder Doc Contributors | MIT License -
    - -
    - - Powered by Sphinx 3.5.4 - - - | - Page source - -
    -
    -
    -
    + + + + + + + +
    + + +
    \ No newline at end of file diff --git a/current/panes/historylog.html b/current/panes/historylog.html index f464915c8..a084a5e6a 100644 --- a/current/panes/historylog.html +++ b/current/panes/historylog.html @@ -1,778 +1,625 @@ - - + + + - + + History — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - - - - - -
    - -
    -
    -
    -

    History

    + +
    + +
    +

    History#

    With the History pane, you can view the recent code and commands you’ve entered into any IPython Console, along with their timestamp.

    Spyder History Log, displaying a list of previously executed commands -
    -

    Using the History pane

    +
    +

    Using the History pane#

    Navigating the History pane is very straightforward. Each Spyder session is marked by a date and timestamp, making it easy to remember when you executed a certain command. Statements can be selected and copied from the context menu or with the normal system shortcuts. Just like in the Editor, selecting a word or phrase displays all other occurrences, and full syntax highlighting is also supported. The last ≈1000 lines entered are stored in the pane.

    -
    -
    -

    Options Menu

    +
    +
    +

    Options Menu#

    The top-right options menu (Hamburger icon) allows you to toggle wrapping of long lines (Wrap lines), and whether the line number is displayed to the left of the text (Show line numbers).

    Spyder History Log, displaying wrapping lines and showing line number -
    -
    -

    Advanced usage

    + +
    +

    Advanced usage#

    The list of commands shown in the History pane are stored in history.py in the .spyder-py3 directory in your user home folder (by default, C:/Users/username on Windows, /Users/username for macOS, and typically /home/username on GNU/Linux). You might need to show invisible files in order to see it on a non-Windows operating system.

    Spyder History Log file

    While there is currently no built-in way to clear history from the Spyder interface aside from resetting preferences, you can do so by closing Spyder, deleting this file and restarting Spyder again.

    -
    - -
    + + -
    + - - - -
    - -
    - - - - -
    - -
    -
    -
    -
    +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/panes/index.html b/current/panes/index.html index a224b40a3..4390d373f 100644 --- a/current/panes/index.html +++ b/current/panes/index.html @@ -1,576 +1,476 @@ - - + + + - - Panes in Depth — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + Panes — Spyder 5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - - -
    - -
    -
    -
    -

    Panes in Depth

    + +
    - - -
    -
    +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/panes/ipythonconsole.html b/current/panes/ipythonconsole.html index f555d7ed9..f4c9aaab2 100644 --- a/current/panes/ipythonconsole.html +++ b/current/panes/ipythonconsole.html @@ -1,584 +1,487 @@ - - + + + - + + IPython Console — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    + +
    + +
    + + + + +
    +
    - - - - - - - - +
    - - - - - - -
    - -
    -
    -
    -

    IPython Console

    + +
    + +
    +

    IPython Console#

    The IPython Console allows you to execute commands and interact with data inside IPython interpreters.

    Spyder IPython Console with code, inline plots, and the In prompt

    To launch a new IPython instance, go to New console (default settings) under the Consoles menu, or use the keyboard shortcut Ctrl-T (Cmd-T on macOS) when the console is focused.

    Spyder showing opening a new Ipython Console

    From the same menu, you can stop currently executing code with Interrupt kernel, clear a console’s namespace with Remove all variables, or relaunch a fresh one with Restart kernel. As each console is executed in a separate process, this won’t affect any others you’ve opened, and you will be able to easily test your code in a clean environment without disrupting your primary session.

    -
    -

    Supported features

    +
    +

    Supported features#

    Any IPython Console, whether external or started by Spyder, supports:

    -
    -

    Special consoles

    +
    +
    +

    Special consoles#

    Spyder also supports several types of specialized consoles. A Sympy console enables creating and displaying symbolic math expressions right inside Spyder. A Cython console allows you to use the Cython language to speed up your code and call C functions directly from Python. Finally, a Pylab console loads common Numpy and Matplotlib functions by default; while this is deprecated and strongly discouraged for new code, it can still be used if necessary for legacy scripts that need it.

    Spyder showing opening a new special Console -
    -
    -

    Options menu

    + +
    +

    Options menu#

    The options menu allows you to inspect your current environment variables (Show environment variables), and the contents of your system’s PATH (Show sys.path contents). In addition, you can have each console display how long it has been running with Show elapsed time.

    Spyder IPython Console with options menu

    You can also change the name of the current IPython console tab with the Rename tab option, or by simply double-clicking it.

    Spyder IPython Console showing renaming console -
    -
    -

    Using external kernels

    + +
    +

    Using external kernels#

    You can connect to external local and remote kernels (including those managed by Jupyter Notebook or QtConsole) through the Connect to an existing kernel dialog under the Consoles menu. For this feature to work, a compatible version of the spyder-kernels package must be installed in the environment or machine in which the external kernel is running.

    Connect to external kernel dialog of the Spyder IPython console -
    -

    Connect to a local kernel

    +
    +

    Connect to a local kernel#

    To connect to a local kernel that is already running (e.g. one started by Jupyter notebook),

    1. Run %connect_info in the notebook or console you want to connect to, and copy the name of its kernel connection file, shown after jupyter <app> --existing.

      @@ -626,9 +529,9 @@

      Connect to a local kernel

    -
    -
    +
    +

    Connect to a remote kernel#

    To connect to a kernel on a remote machine,

    1. Launch a Spyder kernel on the remote host if one is not already running, with python -m spyder_kernels.console.

      @@ -654,10 +557,10 @@

      Connect to a remote kernelConnecting to a remote kernel page in the IPython Cookbook.

      -

    -
    -
    -

    Reload changed modules

    + + +
    +

    Reload changed modules#

    When working in an interactive session, Python only loads a module from its source file once, the first time it is imported.

    Spyder’s User Module Reloader (UMR) automatically reloads modules right in your existing IPython consoles whenever they are modified and re-imported. With the UMR enabled, you can test changes to your code without restarting the kernel.

    @@ -665,9 +568,9 @@

    Connect to a remote kernelReloaded modules: message in the console listing the files it has refreshed when it is activated. If desired, you can turn it on or off, and prevent specific modules from being reloaded, under Preferences ‣ Python interpreter ‣ User Module Reloader (UMR).

    Spyder preferences showing option to use module reloader -

    - -
    + + -
    + - - - - - +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/panes/onlinehelp.html b/current/panes/onlinehelp.html index faa3be9bd..62acd22c7 100644 --- a/current/panes/onlinehelp.html +++ b/current/panes/onlinehelp.html @@ -1,580 +1,483 @@ - - + + + - + + Online Help — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - - -
    - -
    -
    -
    -

    Online Help

    + +
    + +
    +

    Online Help#

    The Online Help pane provides a built-in web browser to explore dynamically generated Python documentation on installed modules—including your own—rendered by a pydoc server running in the background.

    Spyder Online Help pane on the index page, a list of builtin modules -
    -

    Using the Online Help

    +
    +

    Using the Online Help#

    The Online Help’s home shows an index where you can browse the documentation of standard library modules, third party packages installed in your Python environment, and your own local code. Click on the name of any module to open its documentation.

    Spyder Online Help pane showing module browsing @@ -588,9 +491,9 @@

    Using the Online Help

    Links above the search field provide an index of topics with general help and a list of Python keywords linked to their corresponding docs.

    Spyder Online Help pane on the topics page -

    -
    +
    +

    Toolbar items#

    Just like in a web browser, the forward and back buttons move through the pages you have visited, and the home button (house icon) returns you to the module index.

    Spyder Online Help pane showing navigation with arrows

    Perform a realtime search within a page’s content with the Find button (magnifying glass icon top left) or Ctrl-F, navigate through matches with the Up and Down buttons, and make matching case sensitive with the Aa button.

    @@ -601,179 +504,130 @@

    Toolbar items

    To cancel searching or page loading, click the stop button (red square), and to reload the page (such as when you change your own package’s documentation), press the refresh button (circular arrow).

    Spyder Online Help pane showing refreshing pane when updating docs -

    - -
    + + -
    + - - - -
    - -
    - - - - -
    - -
    -
    -
    -
    +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/panes/outline.html b/current/panes/outline.html index 4509aa00f..c2d3386c0 100644 --- a/current/panes/outline.html +++ b/current/panes/outline.html @@ -1,582 +1,485 @@ - - + + + - + + Outline — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - - -
    - -
    -
    -
    -

    Outline

    + +
    + +
    +

    Outline#

    The Outline pane allows you to view and navigate the functions, classes, methods, cells and comments in open Python files. To show or hide the Outline pane, use View ‣ Panes ‣ Outline or Ctrl-Shift-O / Cmd-Shift-O. Click an entry in the outline to jump to its source file location, and use the Go to cursor position toolbar button to highlight the item corresponding to the current Editor position.

    Outline pane -
    -

    Options menu

    +
    +

    Options menu#

    The options menu in the top-right of the pane allows customizing how the outline is displayed.

    Outline options menu

    These customization settings include:

    @@ -592,9 +495,9 @@

    Options menuSort files alphabetically: Sort the file list in alphabetical order. When disabled, all tabs will be sorted by the tab order of the currently selected Editor panel.

    -

    -
    +
    +

    Icons#

    The following icons are used for outline elements:

    -
    - -
    + + -
    + - - - -
    - -
    - - - - -
    - -
    -
    -
    -
    +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/panes/plots.html b/current/panes/plots.html index d7ede72c9..27ea1e5ab 100644 --- a/current/panes/plots.html +++ b/current/panes/plots.html @@ -1,604 +1,507 @@ - - + + + - + + Plots — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Plots

    + +
    + +
    +

    Plots#

    The Plots pane shows the static figures and images created during your session. It will show you plots from the IPython Console, produced by your code in the Editor or generated by the Variable Explorer allowing you to interact with them in several ways.

    Spyder main window showing execution for the Plots pane

    The figures shown in the Plots pane are those associated with the currently active Console tab; if you switch consoles, the list of plots displayed (or none at all, if a new console) will change accordingly.

    Spyder's plots pane and console showing switching consoles -
    -

    Options menu

    +
    +

    Options menu#

    The options menu in the top right of the Plots pane offers several ways to customize how your plots are displayed.

    -
    -

    Mute inline plotting

    +
    +

    Mute inline plotting#

    The Mute inline plotting option is enabled by default, preventing your plots from appearing in the Console. If you deactivate this option, figures will display in both the Plots pane and the Console.

    Spyder's plots pane and console showing plots in the console -
    -
    -

    Show plot outline

    +
    +
    +

    Show plot outline#

    The Show plot outline option, off by default, shows a thin stroke surrounding the area of the figure area, which will also appear in the exported images.

    Spyder's plots pane showing a plot's outline -
    -
    -

    Fit plots to window

    +
    +
    +

    Fit plots to window#

    The Fit plots to Window option, also enabled by default, sizes the figures to match the pane. Disabling it will display plots at their native size, and allow you use the zoom buttons at the top of the pane to scale them manually.

    Spyder main window showing plots zoom -
    -
    -
    -

    Toolbar options

    + + +
    +

    Toolbar options#

    The toolbar at the top of the Plots pane provides several useful features that allow you to interact with your figures. For example, you can cycle sequentially through the plot list with the forward and back arrows.

    Spyder main window showing plot navigation using arrows. @@ -609,208 +512,136 @@

    Toolbar options

    Finally, you can use the “remove” and “remove all” buttons in the toolbar to clear plots from the list.

    Spyder plots pane showing pasting plot in LibreOffice. -

    - -
    + + -
    + - - - -
    - -
    - - - - -
    - -
    -
    -
    - +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/panes/profiler.html b/current/panes/profiler.html index 06403496c..67241de60 100644 --- a/current/panes/profiler.html +++ b/current/panes/profiler.html @@ -1,581 +1,484 @@ - - + + + - + + Profiler — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - - - - - -
    - -
    -
    -
    -

    Profiler

    + +
    + +
    +

    Profiler#

    The Profiler pane recursively determines the run time and number of calls for every function and method called in a file, breaking down each procedure into its smallest individual units. This allows you to easily identify the bottlenecks in your code, points you toward the exact statements most critical for optimization, and measures the performance delta after followup changes.

    Spyder Profiler pane, displaying a list of functions and their execution time -
    -

    Running the Profiler

    +
    +

    Running the Profiler#

    You can browse for a file using the open button to the right of the Profiler’s path box (top left of the pane), which will run profiling over this file automatically.

    Spyder Profiler pane, showing browsing a file and running profiler

    You can manually enter the path in the pane’s path box and then run the analysis on the file by pressing Profile in the Profiler pane.

    @@ -593,9 +496,9 @@

    Running the ProfilerLoad data button. To remove the loaded data, click the Clear comparison button.

    Spyder Profiler pane, showing running profiler from menu bar -

    -
    +
    +

    Interpreting the results#

    Results are broken down by function/method/statement, with each sub-element listed hierarchically under the top-level item that called them. Total Time is that taken by the specified item and every function “underneath” (i.e. called by) it, while Local Time only counts the time spent in the particular callable object’s own scope. The Calls column displays the total number of times the specified object was called at that level inside its parent calling function (or within the __main__ scope, if a top-level object). @@ -604,9 +507,9 @@

    Interpreting the resultsProfiler on a file calling a function sleep_wrapper() that in turn called the sleep() function, and the sleep_wrapper() function took a total of 3.87 ms to run, with 3.86 ms of that spent executing the sleep() function inside it. Therefore, if sleep() called nothing else itself, its Total Time and Local Time would both be identical, at 3.87 ms. Meanwhile, Total Time for sleep_wrapper() would be 3.86 ms, but Local Time only 0.01 ms as the rest was spent inside the sleep() function it called.

    -

    -
    -

    Profiler plugins

    + +
    +

    Profiler plugins#

    There are two additional plugins that you can install to enable other types of profiling in Spyder. First, Spyder Line Profiler allows you to benchmark each line of your code individually. To learn more, visit the spyder-line-profiler git repository.

    @@ -614,188 +517,132 @@

    Profiler pluginsspyder-memory-profiler git repository.

    Spyder Profiler pane, displaying a list of functions and their execution time -

    - -
    + + -
    + -
    - - Plots - Projects - -
    - - - -
    +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/panes/projects.html b/current/panes/projects.html index b8d4f4156..a8c9cb55a 100644 --- a/current/panes/projects.html +++ b/current/panes/projects.html @@ -1,783 +1,630 @@ - - + + + - + + Projects — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - - - - - -
    - -
    -
    -
    -

    Projects

    + +
    + +
    +

    Projects#

    Spyder allows you to associate a given directory with a Project, which automatically saves and restores the files you have open in the Editor from the last time you opened that project. With the Project pane, you can browse all your project’s files, regardless of your current working directory or Files location.

    Spyder showing Project Explorer and projects menu

    In addition, your project’s root folder is used to set your working directory, and automatically added to the PYTHONPATH, so you can easily import and work with any modules and packages you create inside of it.

    -
    +

    Note

    Projects are completely optional and not imposed on users. All of Spyder’ functionality (code completion, session saving, File Explorer, working directory, etc) is available without creating a Project.

    -
    -

    Creating a Project

    +
    +

    Creating a Project#

    To create a Project, click the New Project entry in the Projects menu, choose whether you’d like to associate a Project with an existing directory or make a new one, and enter the Project’s name and path.

    Spyder showing opening a new project -
    -
    -

    Using the Projects Pane

    +
    +
    +

    Using the Projects Pane#

    Once a Project is opened, the Project pane is shown, presenting a tree view of the current Project’s files and directories. It allows you to perform all the same operations as Spyder’s Files pane.

    Spyder Project Explorer, displaying a directory tree of project files -
    -
    -

    Working with version control

    + +
    +

    Working with version control#

    The Project pane has basic integration with the Git distributed version control system, just like in the Files pane. You can commit or browse a file, directory or the entire repository via the commands in the context menu.

    To use this functionality, the Project must be located in a git repository and the git and gitk commands must be on the system path.

    -
    - -
    + + -
    + - - - - -
    +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/panes/pylint.html b/current/panes/pylint.html index 7fdc86a6f..10c4ef9c1 100644 --- a/current/panes/pylint.html +++ b/current/panes/pylint.html @@ -1,582 +1,485 @@ - - + + + - + + Code Analysis — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - - - - - -
    - -
    -
    -
    -

    Code Analysis

    + +
    + +
    +

    Code Analysis#

    The Code Analysis pane detects style issues, bad practices, potential bugs, and other quality problems in your code, all without having to actually execute it. Based on these results, it also gives your code an overall quality score. Spyder’s code analyzer is powered by the best-in-class Pylint back-end, which can intelligently detect an enormous and customizable range of potential errors, bad practices, quality issues, style violations, and more.

    Spyder Pylint pane, showing numerous issues discovered in a file -
    -

    Using the code analyzer

    +
    +

    Using the code analyzer#

    You can select the desired file to analyze directly in the Editor by clicking anywhere within it. To run the analysis, press the configurable shortcut (F8 by default), select Source ‣ Run code analysis from the menu bar or click the Analyze button in the Code Analysis pane. If the Code Analysis pane is not visible, you can open it under View ‣ Panes ‣ Code Analysis. @@ -591,16 +494,16 @@

    Using the code analyzer

    Finally, you can click the dropdown or press the dropdown arrow in the filename field to view results of previous analyses.

    Spyder Pylint pane, showing history -

    -
    +
    +

    Options menu#

    The number of recent runs Spyder should remember can be customized in the History dialog, available from the Code Analysis options menu.

    Spyder Pylint pane, customizing history dialog

    You can also expand or collapse one or all the sections in the pane by using the corresponding options in the options menu.

    Spyder Pylint pane, expanding and collapsing sections -
    -
    -

    Advanced options

    + +
    +

    Advanced options#

    You can turn certain messages off at the line, block or file/module level by adding a # pylint: disable=MESSAGE-NAMES comment at the respective scope, where MESSAGE_NAMES should be replaced with a comma-separated list (or single value) of Pylint message names. For example, a directive might look like # pylint: disable=invalid-name, or # pylint: disable=fixme, line-too-long.

    Spyder Pylint pane, showing disabling a message locally @@ -608,188 +511,132 @@

    Advanced optionspylint --generate-rcfile > .pylintrc in your user directory, from Anaconda Prompt (on Windows) or your terminal (macOS/Linux). For more details on configuring Pylint, see the Pylint documentation.

    Spyder Pylint pane, disabling a message globally in the .pylintrc -

    - -
    + + -
    + - - - -
    - - -
    -
    +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/panes/variableexplorer.html b/current/panes/variableexplorer.html index 75fc14c7c..6bd4de6d4 100644 --- a/current/panes/variableexplorer.html +++ b/current/panes/variableexplorer.html @@ -1,576 +1,479 @@ - - + + + - + + Variable Explorer — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    + +
    + +
    + + + + +
    +
    - - - - - - - - +
    - - - - - - -
    - -
    -
    -
    -

    Variable Explorer

    + +
    + +
    +

    Variable Explorer#

    The Variable Explorer allows you to interactively browse and manage the objects generated running your code.

    Spyder Variable Explorer execution with a variable of type list

    It shows the namespace contents (including all global objects, variables, class instances and more) of the currently selected IPython Console session, and allows you to add, remove, and edit their values through a variety of GUI-based editors.

    @@ -578,29 +481,32 @@

    Variable Explorer -
    -

    Object viewers

    +
    +

    Object viewers#

    Spyder’s Variable Explorer offers built in support for editing lists, strings, dictionaries, NumPy arrays, Pandas DataFrames, Series and more; as well as being able to plot and visualize them with one click.

    -
    -

    Strings

    +
    +

    Strings#

    When a string variable is longer than forty characters, you can double click it to see its value in a text editor to more easily modify it.

    -Variable Explorer text editor, displaying a long string in a window -
    -
    -

    Dictionaries

    +Variable Explorer text editor, displaying a long string in a window + +
    +
    +

    Dictionaries#

    Double-clicking on dictionaries will show a viewer displaying each of its keys with its associated value. You can double click any of the values to modify them, which will open a new viewer if the value is itself an object.

    -Dictionary editor displaying keys and their types, sizes, and values -
    -
    -

    Lists

    +Dictionary editor displaying keys and their types, sizes, and values + +

    +
    +

    Lists#

    For lists, the main Variable Explorer displays a preview of the first ten values. To see them all, double click the list to open a viewer that will display the index, type, size and value of each element of the list. Just like dictionaries, you can double-click values to edit them.

    -List editor displaying a list, showing one being edited -
    -
    -

    Numpy arrays

    +List editor displaying a list, showing one being edited + + +
    +

    Numpy arrays#

    Like lists, for Numpy arrays the Variable Explorer shows a preview of their values. Double-clicking them will open a viewer displaying the array values in a “heat map”, with each value in a grid cell colored based on its numeric quantity. You can deactivate the background color by unchecking the appropriate option in the viewer, which will happen automatically if the array is too large to improve performance.

    @@ -610,28 +516,29 @@

    Numpy arraysResize button will set it automatically.

    Array editor with a 2D int array, showing resizing of columns -

    -
    -

    DataFrames

    + +
    +

    DataFrames#

    DataFrames, like Numpy arrays, display in a viewer where you can show or hide “heatmap” colors, change the format and resize the rows and columns either manually or automatically.

    Dataframe editor showing data frame "heatmap"

    Additionally, starting in Spyder 4, the Variable Explorer has MultiIndex support in its DataFrame inspector, including for multi-level and multi-dimensional indices.

    Dataframe editor showing multi-index support -
    -
    -
    -

    Options menu

    + + +
    +

    Options menu#

    The options menu in the top right of the Variable Explorer pane allows you filter the objects shown by a number of different criteria.

    Spyder Variable Explorer, with options menu

    It also allows you to display the min and max of Numpy arrays instead of a preview of their values.

    -Variable Explorer showing max and min values of numpy array -
    -
    -

    Toolbar buttons

    +Variable Explorer showing max and min values of numpy array + + +
    +

    Toolbar buttons#

    The Variable Explorer’s toolbar includes several useful features that affect the entire namespace. For example, you can save the current session’s data as a .spydata file, which can be loaded later to recover all the variables stored.

    Variable Explorer showing how to save and import data -
    +

    Warning

    You should not load any .spydata file from any source you don’t fully trust (ideally, only those files you’ve saved yourself). Like with any Python pickle, it is inherently not secure against malicious code, as it can load any Python object and can execute arbitrary code on your machine. @@ -640,9 +547,9 @@

    Toolbar buttons

    Finally, there is a button to refresh the Variable Explorer’s contents, which will update it to show the current state of the code running in the IPython console.

    -

    -
    +
    +

    Advanced functionality#

    The context menu, available by right-clicking any variable, provides numerous additional options to interact with objects of various types. These include renaming, removing or editing existing variables, as well as the duplicate option to create a new copy of one of them under a new name you enter in the resulting dialog box.

    Variable Explorer showing duplicating a variable @@ -655,245 +562,146 @@

    Advanced functionalityFor lists and Numpy arrays, more advanced options are available, including generating plots and histograms of their values appropriate to their type and dimensions.

    Plot window showing a plot, generated via the previous options

    You can even save an array to a .npy file by simply clicking the appropriate option, which can later be loaded by Spyder or in your code via numpy.load().

    -
    Context menu for an int array, with the Show image option selected +Context menu for an int array, with the Show image option selected +

    For two-dimensional arrays, you can also display them as images, treating their values as RGB colors. For this, Spyder uses Matplotlib’s colormaps, which can be easily changed to match your preferences.

    Interactive image based on the array's data

    Finally, we added a context-menu action to open any object using the new Object Explorer even if they already have a builtin viewer (DataFrames, arrays, etc), allowing for deeper inspection of the inner workings of these datatypes.

    Object explorer showing dataframe -

    - -
    + + -
    + - - - -
    - -
    - - - - -
    - -
    -
    -
    - - - - - - - Open chat - +
    +
    + +
    -
    -
    - Connect with us on: - - - GitHub - - - | - - Twitter - - - | - - Facebook - - - | - - YouTube - - - | - - Instagram - - - | - - Google Groups - -
    -
    -
    - - -
    - © 2009-2024 Spyder Doc Contributors | MIT License -
    - -
    - - Powered by Sphinx 3.5.4 - - - | - Page source - -
    -
    -
    -
    + + + + + + + + +
    + + +
    \ No newline at end of file diff --git a/current/plugins/index.html b/current/plugins/index.html index 928d76d22..2b2341b0f 100644 --- a/current/plugins/index.html +++ b/current/plugins/index.html @@ -1,576 +1,465 @@ - - + + + - - Spyder Plugins — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + Plugins — Spyder 5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - - -
    - -
    -
    -
    -

    Spyder Plugins

    + +
    - - -
    -
    +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/plugins/lineprofiler.html b/current/plugins/lineprofiler.html index f0febf7e3..58a5c9e01 100644 --- a/current/plugins/lineprofiler.html +++ b/current/plugins/lineprofiler.html @@ -1,594 +1,486 @@ - - + + + - + + Spyder Line Profiler — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    + +
    + +
    + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Spyder Line Profiler

    + +
    + +
    +

    Spyder Line Profiler#

    Spyder-Line-Profiler is a plugin to run the Python line profiler. This package profiles the time that individual lines of code take to execute.

    Spyder with the Line Profiler pane open -
    -

    Installing the Line Profiler

    +
    +

    Installing the Line Profiler#

    If you installed Spyder using conda, the best way to obtain Spyder-Line-Profiler is to run the following command in your terminal (or Anaconda prompt on Windows):

    conda install spyder-line-profiler -c conda-forge
     
    -
    +

    Important

    At the moment it is not possible to use this plugin with the Spyder Standalone installers for Windows and macOS. We’re working to add support for them in the future.

    Restart Spyder in order to be able to use the plugin.

    -
    -
    -

    Using the Line Profiler

    +
    +
    +

    Using the Line Profiler#

    When the Line Profiler is installed, it will be available under the menu item View ‣ Panes ‣ Line Profiler.

    Spyder showing View Panes Line Profiler

    You will see it then as a tab next to the Files tab. @@ -610,165 +502,123 @@

    Using the Line Profiler

    Line contents: the source code in the line.

    Lines with a stronger color take more time to run.

    -

    -
    + + -
    + - -
    - - -
    +
    + + +
    +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/plugins/notebook.html b/current/plugins/notebook.html index 51a1aa34d..9def32074 100644 --- a/current/plugins/notebook.html +++ b/current/plugins/notebook.html @@ -1,593 +1,485 @@ - - + + + - + + Spyder Notebook — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Spyder Notebook

    + +
    + +
    +

    Spyder Notebook#

    Spyder-notebook is a plugin that allows you to open, edit and interact with Jupyter Notebooks right inside Spyder.

    Spyder Notebook in Spyder

    Using notebooks inside Spyder allows you to take advantage of their web interface alongside Spyder’s powerful features such as the Variable explorer, console and debugger.

    -
    -

    Installing the Notebook

    +
    +

    Installing the Notebook#

    If you installed Spyder using conda, the best way to install Spyder-notebook is to run the following command in your terminal or Anaconda prompt on Windows:

    conda install spyder-notebook -c conda-forge
     
    -
    +

    Important

    At the moment it is not possible to use this plugin with the Spyder Standalone installers for Windows and macOS. We’re working to make that possible in the future.

    Restart Spyder in order to be able to use the plugin.

    -
    -
    -

    Using the Notebook

    +
    +
    +

    Using the Notebook#

    When the Notebook is installed, it will be available under the menu item View ‣ Panes ‣ Notebook.

    Spyder showing view panes Notebook

    You will see it then as a tab in the bottom of the editor area. When switching to it, a welcome screen will be displayed, from where you can create a new notebook by right-clicking it and selecting New notebook.

    @@ -599,197 +491,141 @@

    Using the NotebookOpen, which will allow you to look for ipynb files in your computer. Click any notebook that you want to open inside Spyder and you will be able to see it as a new tab in the Notebook pane.

    Gif showing opening a Jupyter notebook inside Spyder

    The Open recent option displays a list of the recent notebooks you opened in Spyder, from which you can select them and open them again in Spyder.

    -

    -
    +
    +

    Connecting an IPython Console#

    You can connect an IPython Console to your notebook, which will allow you to view your variables in the Variable Explorer. To do so, go to the options menu and click the Open console option. This will open a new console with the same name of your notebook and display the variables of the cells that you have executed previously in your Notebook. If you don’t see them, press Enter in the console.

    Gif showing connecting console and displaying variables

    You can view, modify and create new ones in the console too.

    Since the Variable Explorer is associated to each console, closing the notebook’s console will immediately hide the variables from the Variable Explorer.

    -
    -
    -

    Additional Options

    + +
    +

    Additional Options#

    The context menu, available by right-clicking the pane area outside the notebook, allows you to zoom your notebook in or out.

    Gif zooming in and out the notebook.

    You can also select the code from your Notebook and copy it on your clipboard to paste this code anywhere you want.

    Gif copying and pasting

    Finally, you can see all the server information of your notebook by clicking the Server info option in the context menu.

    Server info for notebook in Spyder -
    -
    + + -
    + - - - - -
    +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/plugins/terminal.html b/current/plugins/terminal.html index 9cae4caaf..ba3e0c767 100644 --- a/current/plugins/terminal.html +++ b/current/plugins/terminal.html @@ -1,594 +1,486 @@ - - + + + - + + Spyder Terminal — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    + +
    + +
    + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Spyder Terminal

    + +
    + +
    +

    Spyder Terminal#

    Spyder-terminal is a plugin that allows you to have integrated system terminals inside Spyder.

    Spyder Terminal in Spyder

    Spyder-terminal allows you to use any system shell installed in your system (e.g. Bash, Zsh or Powershell) rather than just the IPython console. You can use it to issue commands, interact with version control or to run programs.

    -
    -

    Installing the Terminal

    +
    +

    Installing the Terminal#

    If you installed Spyder using conda, the best way to install Spyder-terminal is to run the following command in your Terminal or Anaconda prompt on Windows:

    conda install spyder-terminal -c conda-forge
     
    -
    +

    Important

    At the moment it is not possible to use this plugin with the Spyder Standalone installers for Windows and macOS. We’re working to make that possible in the future.

    Restart Spyder in order to be able to use the plugin.

    -
    -
    -

    Using the Terminal

    +
    +
    +

    Using the Terminal#

    When the Terminal is installed, it will be available under the menu item View ‣ Panes ‣ Terminal.

    Spyder showing view panes Terminal

    You will see it then as a tab at the bottom of the console area. When switching to it, a new terminal tab will be created. You can also create more terminals by clicking in the + button at the upper right corner of the terminal area.

    @@ -597,179 +489,130 @@

    Using the Terminal

    If you right click the terminal area, it’s possible to issue commands such as Clear Terminal, Zoom In/Out and Copy/Paste Text.

    Spyder showing the terminal context menu -

    -
    +
    +

    Terminal Preferences#

    It’s also possible to customize the Terminal by going to python ‣ Preferences… and then clicking on the Terminal tab on the menu to the left. You can select the shell interpreter, set the buffer limit and the type of cursor.

    Preferences of the Terminal plugin -
    -
    + + -
    + - - - - -
    +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/quickstart.html b/current/quickstart.html index 268ac940a..5b49eacd3 100644 --- a/current/quickstart.html +++ b/current/quickstart.html @@ -1,590 +1,474 @@ - - + + + - - Quickstart — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + Tour — Spyder 5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    + +
    + +
    + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Quickstart

    + +
    + +
    +

    Tour#

    Welcome to our Quickstart! Here you will find an interactive tour that will guide you through Spyder’s interface. You’ll get familiar with the most important parts of the IDE, especially those we’ll be mentioning throughout our docs. Finally, you’ll get to walk through some of Spyder’s key panes and functionality.

    - - - - - - - - - + + + + + + + + + @@ -603,140 +487,109 @@

    Quickstart

    -
    + -
    + - -
    - - -
    -
    +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/search.html b/current/search.html index 36beb29be..0c31f1fb0 100644 --- a/current/search.html +++ b/current/search.html @@ -1,718 +1,518 @@ - - + + + - - Search — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - - - - + Search - Spyder 5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + - - + + + + +
    + + - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    - - - +
    + +
    + + + + +
    +
    - - - - - - - - - - +
    - - - - -
    +
    + +
    - +
    - -
    - -
    -
    - -

    Search

    -
    - -

    - Please activate JavaScript to enable the search - functionality. -

    -

    - Searching for multiple words only shows matches that contain - all words. -

    -
    - - - -
    - -
    -
    - -
    - -
    - - -
    - -
    + + + -
    - +
    +
    \ No newline at end of file diff --git a/current/searchindex.js b/current/searchindex.js index e52bd5a20..2eb1e637b 100644 --- a/current/searchindex.js +++ b/current/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["faq","index","installation","panes/debugging","panes/editor","panes/fileexplorer","panes/findinfiles","panes/help","panes/historylog","panes/index","panes/ipythonconsole","panes/onlinehelp","panes/outline","panes/plots","panes/profiler","panes/projects","panes/pylint","panes/variableexplorer","plugins/index","plugins/lineprofiler","plugins/notebook","plugins/terminal","quickstart","troubleshooting/basic-first-aid","troubleshooting/call-for-help","troubleshooting/common-illnesses","troubleshooting/emergency-cpr","troubleshooting/first-steps","troubleshooting/index","troubleshooting/submit-a-report","videos/first-steps-with-spyder","videos/index","videos/working-with-spyder","workshops/financial","workshops/index","workshops/plugin-development","workshops/qt_fundamentals","workshops/scientific-computing"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["faq.rst","index.rst","installation.rst","panes/debugging.rst","panes/editor.rst","panes/fileexplorer.rst","panes/findinfiles.rst","panes/help.rst","panes/historylog.rst","panes/index.rst","panes/ipythonconsole.rst","panes/onlinehelp.rst","panes/outline.rst","panes/plots.rst","panes/profiler.rst","panes/projects.rst","panes/pylint.rst","panes/variableexplorer.rst","plugins/index.rst","plugins/lineprofiler.rst","plugins/notebook.rst","plugins/terminal.rst","quickstart.rst","troubleshooting/basic-first-aid.rst","troubleshooting/call-for-help.rst","troubleshooting/common-illnesses.rst","troubleshooting/emergency-cpr.rst","troubleshooting/first-steps.rst","troubleshooting/index.rst","troubleshooting/submit-a-report.rst","videos/first-steps-with-spyder.rst","videos/index.rst","videos/working-with-spyder.rst","workshops/financial.rst","workshops/index.rst","workshops/plugin-development.rst","workshops/qt_fundamentals.rst","workshops/scientific-computing.rst"],objects:{},objnames:{},objtypes:{},terms:{"000":33,"000000":33,"006954":33,"008778":33,"009126":33,"018784":33,"020698":33,"023033":33,"023134":33,"029931":33,"02d":35,"042060":33,"044063":33,"053174":33,"0583":33,"058395":33,"061057":33,"062207":33,"063068":33,"0809":33,"081239":33,"082308":33,"100":[0,35,37],"1000":[8,33,35],"11142":37,"1234":10,"127":0,"129":37,"144":32,"1454":33,"145416":33,"155103":33,"1637":33,"171":33,"1949":33,"1997":33,"199700":33,"200":0,"2012":[33,37],"2013":33,"2014":33,"2015":33,"2016":[33,37],"2017":33,"2018":33,"2019":33,"2020":[0,33],"2021":33,"2061518063427656":33,"2062":33,"2370":33,"23704031354688784":33,"252":33,"265":33,"26775":37,"2859":33,"2859066023606343":33,"300":33,"324053":33,"3290":37,"338":32,"3600":33,"371":37,"408009":33,"4181":33,"479":37,"482":32,"4940":33,"5372":37,"5813":37,"6203":33,"6241":37,"626":37,"6275":37,"6972":33,"7307":37,"7587":33,"8176":33,"89547":37,"abstract":[35,37],"bjerrek\u00e6r":37,"boolean":[17,35,37],"break":[0,14,33,35],"case":[2,4,6,11,23,25,26,29,30,32,33,35,36,37],"class":[7,12,16,17,25,32,33,35,36,37],"default":[0,2,3,4,5,7,8,10,13,14,16,23,25,30,32,33],"export":[0,13,37],"final":[0,2,3,4,6,10,13,14,16,17,20,22,25,27,30,32,34],"float":[33,35,37],"function":[0,1,2,3,5,7,9,10,12,14,15,19,22,25,30,32,35,36,37],"import":[0,2,3,9,10,15,22,25,26,32,33,35,37],"int":[30,35,37],"long":[0,8,10,16,25,33,35,36,37],"new":[0,1,2,3,4,10,13,15,17,20,21,23,24,25,27,30,32,33,35,37],"null":37,"public":[24,35,37],"return":[4,6,11,26,30,35,37],"short":[30,33,35],"static":[7,13,33,37],"super":35,"switch":[2,3,4,13,20,21,30,32],"true":[33,35,37],"try":[0,23,25,26,27,29,30,32,33,35,37],"while":[0,2,3,4,7,8,10,14,23,25,30,32,33,37],And:[2,33,35,37],Are:37,But:[33,37],For:[0,1,2,3,4,10,13,14,16,17,19,20,23,25,26,30,32,33,35,37],GPS:[35,36],IDE:[2,4,22,23,24,35,37],IDEs:[4,25],Its:[33,35],Not:[33,35],That:[35,36],The:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,24,26,29,30,32,33,34,36],Then:[0,2,10,23,26,33,35,36,37],There:[3,14,17,25,27,29,32,35,36,37],These:[1,2,4,12,17,23,30,33,35,36,37],Use:[0,3,4,26,32,33,37],Used:32,Using:[9,18],With:[0,2,3,8,10,15,30,32,35],Yes:[0,2],__file__:35,__init__:[16,35,36],__main__:14,_interv:35,_opt_w:33,_ret:33,aapl:33,abil:[29,35],abl:[2,10,17,19,20,21,23,24,25,27,32,33,35,37],about:[1,2,10,23,24,29,30,32,33,35,36,37],abov:[0,2,4,11,19,23,26,29,30,33,35,37],absolut:[0,5,12,32],access:[3,4,5,6,7,30,33,35,36],accident:30,accompani:33,accomplish:32,accord:[5,35],accordingli:13,account:[29,35,37],accumul:33,accur:33,achiev:[33,35,37],across:[17,32],action:[4,17,33],activ:[0,2,3,4,5,10,13,23,24,25,32,33,35],actual:[16,23,27,29,30,33,35],actual_weight:33,adapt:35,add:[0,2,3,4,5,17,19,25,26,32,33,34,36,37],add_application_toolbar:35,add_item_to_menu:35,add_item_to_toolbar:35,add_status_widget:35,added:[2,15,17,19,35],adding:[2,3,4,12,16,17,32,35],addit:[0,1,4,10,14,15,17,18,32,33,35,36,37],addition:[3,5,13,17,30,32],addon:35,address:[10,25,36],addstretch:35,addwidget:35,adequ:33,adjust:[3,16,17,35],administr:10,advanc:[0,1,4,6,9,28,32,37],advantag:[20,32,33,35,37],advertis:35,advis:[2,35],affect:[4,10,17,30,35,37],after:[2,4,7,10,14,19,23,25,26,30,32,33,35,37],afterward:[23,33],again:[8,20,23,27,32,35,37],against:17,age:37,ages:37,aid:[0,25,26,27,28,35],aim:[24,33],alert:37,algorithm:[33,37],align:37,all:[0,2,3,4,6,8,10,12,13,14,15,16,17,19,20,23,26,30,32,33,35,37],allow:[0,2,3,4,5,6,7,8,10,12,13,14,15,16,17,20,21,30,32,33,35,36,37],almost:[23,33],alon:27,along:[2,3,8,23,24,29,30],alongsid:20,alpha:37,alphabet:[4,12],alreadi:[0,2,10,17,24,25,26,27,33,35,37],also:[2,4,5,7,8,10,11,13,14,16,17,20,21,26,27,29,30,32,33,35,36,37],alt:[4,35],altern:[36,37],although:[0,33,35,37],alwai:[2,3,30,32,33,37],amazon:33,among:[33,35,36,37],amount:[2,33,37],amzn:33,anaconda:[0,16,19,20,21,23,25,26,27,29,30,32,33,35,37],analys:[16,32],analysi:[1,2,7,9,14,25,32,34,35],analyst:[1,33,37],analyz:[9,32,33,37],ani:[0,1,2,3,4,7,8,10,11,14,15,17,19,20,21,23,25,26,29,30,32,33,35,37],annex:35,annual:33,anoth:[0,6,13,23,32,33,35,37],anova:34,answer:[0,24,37],antiviru:26,anymor:32,anyon:[0,1,33,35],anyth:29,anywai:[0,2,29],anywher:[16,20,30,32,35],apach:35,api:[33,35],app:[10,26,36],appdata:23,appear:[0,2,4,13,14,17,25,27,30,32,33,35,37],append:37,appl:33,appli:[0,30,33,35,37],applic:[0,1,2,4,5,24,26,29,30,32,33,35,36,37],applicationtoolbar:35,appreci:[33,37],approach:[0,23,25,33],appropri:[0,2,17,32,35,37],approxim:33,apt:2,arbitrari:17,arch:2,area:[4,13,20,21,35],aren:[0,23,24,27],argument:[4,32,33,35,37],aris:35,around:[1,4,23,25,32,33,37],arrai:[2,30,32,33,37],arrang:36,arriv:35,arrow:[3,4,5,11,13,14,16,32],artifact:35,artifici:33,ascend:33,asid:[0,8,24,35],ask:[1,2,24,37],aspect:37,assembl:33,asset:33,assign:[30,32,33,35],assist:[2,23,24],associ:[7,9,13,15,17,20,32,35],assum:33,assumpt:37,asterisk:37,astra:33,astro:37,atom:25,attent:35,attribut:[5,12,33,35,37],auto:29,autocomplet:[3,4,27],autoformat:4,automat:[0,2,3,5,6,9,10,12,14,15,17,29,30,32,33,36,37],autopep8:4,avail:[0,2,3,4,7,15,16,17,19,20,21,23,30,32,33,35,36,37],averag:[19,33,37],avoid:[0,2,3,23,33,36,37],awar:35,axi:[33,37],axvlin:37,azn:33,back:[3,11,13,16,26,29,33,35],backend:[3,10,13,23],background:[4,11,17],backtick:29,backward:33,bad:[16,32,33,37],balanc:33,bar:[0,4,14,16,25,30,32,33,35,36,37],bare:[23,33],barplot:37,base:[0,1,10,16,17,32,33,35,36,37],base_curr:33,baselin:0,basetimerstatu:35,bash:21,basi:36,basic:[0,1,2,4,5,7,15,24,25,26,27,28,31,33,34,35],bat:[2,26],batch:26,bdist_wheel:35,beauti:[1,37],becaus:[30,32,33,35,37],becom:[1,36],been:[0,7,10,19,29,33,37],befor:[0,2,3,23,24,27,29,30,32,33,35,36,37],begin:[29,32,33,35],beginn:24,behav:[24,37],behavior:[4,29,33,35,36],being:[0,4,10,17,19,25,33,35],bell:37,below:[0,2,4,29,33,35],benchmark:14,benefit:0,best:[0,16,19,20,21,23,29,33,35,37],bet:33,better:[0,23,24,27,33,35,37],between:[4,14,30,32,33,35,37],beyond:[0,25,30,31,35,37],bia:37,big:[0,32],biggest:33,bin:[2,37],binder:[0,2,33,37],bit:33,bitcoin:33,bjerreka:37,black:4,block:[4,16,23,29,32,35,36,37],blue:33,bluetooth:[35,36],boilerpl:35,book:[33,37],border:37,bot:35,both:[2,7,13,14,16,25,29,30,32,33,37],bottleneck:[14,32],bottom:[0,20,21,25,30,33,37],bought:33,bound:33,boundari:37,box:[0,2,4,6,10,14,16,17,30,32,36,37],bracket:32,breakpoint:[4,9],brew:2,brief:24,briefli:30,bring:29,broad:[6,33],broadli:37,broken:[2,14],brought:33,brows:[4,5,10,11,14,15,16,17,30,32,33,37],browser:[0,2,5,11,32,35],bsd:35,btc:33,btc_hist:33,buffer:21,buffett:33,bug:[0,1,2,4,16,23,24,26,27,32,37],build:[33,34,36],built:[2,3,4,5,8,10,11,17,25,32,33,35,36,37],builtin:[3,17],bump:35,bundl:[0,2],busi:33,button:[0,4,5,6,9,11,12,13,14,16,19,20,21,29,30,32,33,35,36,37],c0326:32,ca_item:37,ca_test:37,calc:32,calcul:[20,33,35,37],call:[2,3,10,14,23,27,28,32,33,35,37],callabl:[14,36],calltip:[0,4,10,25],can:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,21,23,24,25,26,27,29,30,32,33,34,36],cancel:[11,14,16,35],cannot:[35,37],capabl:[1,2,10,33,37],capit:[6,35],captur:35,care:[2,23,33],carefulli:26,carlo:24,carpentri:35,cask:2,cat:37,categor:37,categori:[27,37],catplot:37,caus:[23,24,25],cautiou:33,cell:[0,12,17,20,36,37],center:37,central:24,certain:[6,8,16,32,37],certainli:23,chanc:[2,23,27,29,37],chang:[0,1,2,3,4,5,6,9,11,13,14,17,30,32,33,36,37],channel:[0,1,2,35],channel_prior:2,charact:17,charg:35,chart:[33,35,36,37],chat:[2,24],chatroom:2,check:[0,1,2,3,4,10,16,23,24,25,26,27,29,30,32,33,37],check_compat:35,checkbox:33,checkmark:35,children:35,choic:[4,35,37],choos:[9,15,17,30,33,35,36,37],chosen:37,chunk:[33,37],circl:35,circular:11,cirillo:35,cla:4,classic:33,classifi:35,classmethod:4,clean:[0,10,23,27,35,37],cleaner:32,clear:[0,3,4,6,8,10,13,14,21,27],clearli:33,click:[0,2,3,4,5,6,7,10,11,12,13,14,15,16,17,20,21,25,26,27,29,30,32,33,35,37],clipboard:[5,13,20,32,33,37],clone:35,close:[4,8,20,23,29,30,33,35,37],close_data_1:33,close_data_2:33,cloud:[33,37],cmap:33,cmd:[3,4,10,12,30,33],code:[0,2,3,7,8,9,10,11,12,13,14,15,17,19,20,23,24,25,27,29,30,31,35,36],codebas:35,codecel:4,cognitive_scor:37,coin:33,coin_search:33,cokkiecutt:35,col:37,colab:[33,37],collaps:[5,6,14,16,32],collect:37,color:[4,17,19,33,35,36,37],color_palett:37,colorbar:33,colormap:17,column:[5,14,17,19,30,32,33,36,37],com:35,combin:[1,37],come:[0,2,4,23,33,35,37],comma:16,command:[0,2,3,4,8,10,15,19,20,21,23,25,26,29,30,32,35],comment:[12,16,32],commerci:0,commit:[5,15],common:[0,2,4,5,10,27,28,32,36],commonli:[3,33,36],commun:[0,2,24,36,37],compani:[0,33],companionship:37,compar:[14,32,33,37],comparison:[14,32],compat:[0,2,10,37],compens:33,compil:35,complet:[0,1,3,9,10,15,28,29,30,33,35,36,37],complex:[3,30,33,35,37],compon:[9,33,34,35,37],compos:[33,37],composit:33,comprehens:[1,2,33,37],comput:[0,2,5,20,30,32,33,34,35,36],concept:[33,35],concern:37,conclus:37,concret:37,conda:[0,19,20,21,23,24,25,29,30,35],condit:3,conf:35,conf_default:35,conf_sect:35,conf_vers:35,conf_widget_class:35,config:[2,23,35],configur:[0,2,3,7,10,14,16,30,32,34],confirm:[0,33,37],conflict:[2,33,37],confpag:35,connect:[0,1,2,7,18,33,35,36],connect_info:10,consid:[33,35],consider:[35,37],consist:[4,26,29,33,35,36,37],consol:[0,3,4,7,8,9,13,14,17,18,21,23,25,29,30,32,35],consolid:35,constant:[12,33,35],constitut:37,constraint:33,construct:[33,37],constructor:[4,35],consult:[2,4,24,27,33],contact:35,contain:[0,16,24,29,32,33,36,37],container_class:35,content:[3,4,5,6,10,11,17,19,26,30,32,35],context:[4,5,8,15,17,20,33,37],continu:[25,30,32],contract:17,contrast:33,contribut:[2,35,37],control:[2,3,4,9,21,25,32,34,36],conveni:[10,33,35,37],convent:[4,37],convert:35,cookbook:10,cookicutt:35,cookiecutt:35,cool:33,copi:[0,2,5,8,10,13,16,17,20,21,23,26,29,30,32,33,35,37],cordoba:24,core:[0,4,24,30,32,35,36],corner:[7,21,33,35,37],corr:33,correct:[1,32,33,37],correctli:[0,37],correl:[33,37],correspond:[4,5,10,11,12,16,25,32,33,35,36,37],could:[33,35,36,37],couldn:27,count:[4,14,35,37],countdown:35,counter:35,coupl:[23,32,33],cours:[23,33,37],cov:33,covari:33,cover:1,coverag:35,cpr:[27,28],cpu:0,crash:27,creat:[0,2,4,5,9,10,12,13,17,20,21,23,25,26,33,34,36,37],create_act:35,create_menu:35,create_spinbox:35,create_toolbutton:35,creation:35,criteria:17,critic:[14,37],crowdin:1,crucial:37,crypto:33,crypto_hist:33,crypto_list:33,csv:[32,33,37],ctrl:[3,4,7,10,11,12,30,33,35],cumprod:33,currenc:33,current:[0,1,2,3,4,8,10,12,13,14,15,17,21,25,26,32,33,35,37],current_year:33,cursor:[0,4,12,21,32],curv:37,custom:[2,3,4,5,12,13,16,21,23,31,32,36],customiz:16,cycl:[13,35],cython:[2,10,25,33,37],d_age:37,d_religion_serios:37,daemon:10,dai:[24,33],dark:30,dash:37,data:[1,2,4,10,14,17,28,32,34,35,36],data_1:33,data_2:33,datafram:[2,4,33,37],dataset:34,datatyp:17,date:[0,1,2,5,8,23,25,32,33,37],datetim:32,deactiv:[3,13,17],deadlin:35,deal:33,deb:2,debug:[1,4,9,26,28,37],debugg:[9,10,17,20],decad:33,decim:[17,33],declar:[4,35],declin:33,decor:[4,19,35],decreas:[33,35],dedic:[0,2,4,33,35,37],deep:[0,1,37],deeper:17,def:[33,35],defin:[3,4,6,30,32,33,35,37],definit:[4,12,35],degre:37,delet:[5,8,23,30,33,35,37],delimit:33,delta:14,demo:30,demograph:37,demonstr:30,denomin:33,denot:36,densiti:37,depend:[0,2,23,29,33,35,37],deprec:10,depth:[1,35],deriv:35,describ:[0,2,4,25,26,29,33,37],descript:[1,2,4,16,27,29,33,35,37],deserv:35,design:[1,33,35,36,37],desir:[4,10,16,17,33,35,37],desktop:[35,36],despit:33,detail:[0,1,2,10,16,23,27,29,33,35,36],detect:[16,32,37],determin:[4,14,32],detract:37,dev0:35,dev:[0,2,35],develop:[0,1,24,30,33,34,36,37],deviat:[4,37],dfd:37,dfn:37,diagnos:[23,29],diagram:37,dialog:[0,2,4,10,14,16,17,25,26,27,29,30,35],dictionari:[33,35],did:[29,33,35,37],diff:[14,32,35],differ:[1,3,4,5,17,23,26,30,32,33,35,36,37],differenti:37,difficult:[29,37],difficulti:[2,29],dimens:17,dimension:17,diminish:33,dir:10,direct:[2,16,35],directli:[5,7,10,11,16,17,24,26,29,30,32,33,37],directori:[3,4,5,6,8,10,15,16,21,23,25,26,30,32,33,35],disabl:[4,7,12,13,16,26,32,35],disappear:26,discard:37,discourag:10,discov:[30,32,37],discuss:[2,24,33],disk:[2,14,26,33],dismiss:36,dispers:37,displai:[0,2,3,4,5,6,7,8,10,12,13,14,17,19,20,25,29,32,33,35,36,37],display_tim:35,disproven:37,disrupt:10,dist:35,distinct:[4,33],distinguish:37,distribut:[0,5,15,23,24,27,33,35],distro:[0,2],divid:[4,30,33],doabl:23,doc:[4,11,22,23,24,32,35],dock:[2,35],dockabl:[35,36],docstr:[0,7],document:[2,4,7,10,11,13,16,25,30,32,33,35,36,37],doe:[0,2,16,26,29,33,35,37],doesn:[0,1,4,16,23,25,26,32,33],dog:37,dog_or_cat:37,dog_or_cat_col_nam:37,dog_or_cat_pivot:37,dog_or_cat_sampl:37,doi:37,doing:[23,30],dollar:33,don:[0,1,17,20,23,25,30,32,33,35,37],done:[23,33,35,37],dot:[33,37],doubl:[2,4,5,10,14,17,26,29,30,32,33,37],doubt:[35,37],down:[3,4,11,14,23,30,32,33],download:[0,30,32,35],downward:37,dpi:33,drag:[2,4,30],draw:[33,37],drawn:33,drive:0,drop:[4,11,30,33,37],dropdown:[0,4,6,14,16,30,32,33,37],dropna:[33,37],dtype:[33,37],dual:0,due:[2,23,25,33,35,37],duplic:[17,29,36],durat:35,dure:[13,33,35],dynam:[7,11,25],each:[0,1,3,4,5,6,8,10,12,14,17,20,30,32,33,35,36,37],earli:33,earlier:[2,35,37],earn:33,eas:[32,35],easi:[1,2,4,8,25,33,37],easier:[4,33,35,37],easiest:[0,1,30],easili:[2,3,4,6,7,10,14,15,16,17,25,30,32,33,35,37],econometr:33,ecosystem:2,edit:[1,2,3,9,16,17,20,30,32,33,35,36,37],editor:[0,3,5,6,7,8,9,10,12,13,14,15,16,17,20,21,25,30,32],effect:[0,2,33],effici:[4,32],effort:35,either:[0,1,4,10,17,19,23,25,26,29,33,35,36],elaps:10,element:[4,12,14,17,30,33,35,36,37],elementari:33,elimin:33,els:[14,26,27,29],elsewher:[23,29,32],email:35,embed:36,emerg:[27,28,37],emit:36,empir:37,emploi:37,employe:0,empti:[4,37],enabl:[2,3,4,6,7,10,13,14,26,32,33,35,37],encapsul:35,encount:[2,25],encourag:[1,33],end:[0,16,32,33,35,37],end_i:33,end_year:33,endpoint:35,engin:[1,33,37],enhanc:[0,1,3,10,23,34],enjoi:30,enorm:16,enough:33,ensur:[2,33],enter:[0,3,4,6,7,8,10,11,14,15,16,17,20,26,29,30,32,33,35,37],entertain:33,entir:[4,15,17,30,32,33,37],entri:[2,4,12,15,16,30,32,35],entry_point:35,env:[0,2,23,37],environ:[0,1,10,11,17,23,24,25,27,29,32,34],equal:[33,37],equival:0,eras:6,error:[0,2,4,14,16,23,26,27,28,29,32,36,37],especi:[22,24,25,33,35,37],essenc:[33,37],essenti:33,establish:37,estim:[33,37],etc:[0,2,4,15,17,33],etc_hist:33,etern:37,eth:33,ethereum:33,evalu:32,even:[17,23,24,33,35,37],event:3,eventu:35,ever:30,everi:[3,4,12,14,23,24,32,35,36],everyon:[1,27,30,32],everyth:[0,2,23,29,30,32,33,35,37],evid:37,exact:14,exactli:[3,29],examin:[29,37],exampl:[0,3,4,13,14,16,17,30,32,33,35,37],exceed:33,excel:[33,37],except:[2,26,33,37],exchang:35,exclam:3,exclud:6,execut:[0,1,3,4,8,10,14,16,17,19,20,25,26,30,32,33,35,37],exercis:35,exist:[0,2,4,10,15,16,17,23,27,32,33,35,37],exit:0,exp_real_ret:33,expand:[5,6,10,12,14,16,17,32],expect:[23,29,35,37],expected_pr:33,experi:[1,4,33,35,37],experienc:[2,24,27,29],experiment:2,expert:[2,23,24],explain:[29,35,37],explan:37,explor:[1,2,3,4,9,10,11,13,15,20,23,26,27,30,32,34,35],expos:35,express:[4,6,10,32,37],extend:[35,36],extended_output:33,extens:[5,6,14,20,32,35,36],extent:[33,37],extern:[0,2,4,5,9,32],extra:35,extract:[33,37],f10:[14,32],f12:3,f_critic:37,f_onewai:37,f_valu:37,face:2,facilit:35,fact:[33,35,37],factori:0,fail:[14,16,26],fairli:[25,37],fals:[33,35,37],famili:33,familiar:[1,3,22,27,30,32,33,37],faq:2,far:37,fast:[3,37],faster:[2,32,35,37],fastest:33,favor:33,favorit:[33,35],featur:[0,1,2,6,7,9,13,17,20,23,24,30,32,33,36,37],fedora:2,feel:[35,37],few:[2,25,35,37],ffill:33,field:[0,6,10,11,14,16,32,35,37],fifth:35,fig:[33,37],fig_dim:37,figsiz:[33,37],figur:[3,4,13,27,30,32,33,37],file:[0,2,3,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,23,25,26,30,32,33,35,36],filenam:[5,6,14,16,32],filesystem:5,fill:[10,29,36],filter:[5,6,17,37],financ:33,financi:[34,35,37],find:[0,5,7,9,11,16,17,22,23,24,26,29,30,32,33,35,37],find_crypto_pair:33,finish:[35,37],firewal:26,first:[0,1,2,10,14,17,25,26,28,29,31,32,34,37],fit:[32,33,36,37],fivethirtyeight:33,fix:[0,1,2,23,25,26,27,29,32,35,37],fixm:16,flag:4,float64:33,flow:3,fluctuat:33,fly:4,focu:35,focus:[0,10],folder:[0,2,5,8,10,15,16,23,25,32,35],follow:[0,1,2,4,12,19,20,21,23,25,26,27,29,30,33,35,36,37],followup:14,font:[4,11,30,33,35,36],forecast:33,forg:[0,2,19,20,21,23,33,35],forget:33,form:[29,36],formal:[33,35],format:[5,7,13,17,29,32,33,35],formatt:33,former:24,forti:17,fortun:[35,37],forum:23,forward:[11,13],found:[0,6,23,33,35,37],four:[30,32,35,37],fourth:35,fpalm:35,fragment:4,framework:[35,36],francesco:35,francisco:35,free:[0,1,24,35],freedom:37,freeli:[0,30],frequenc:[33,37],frequent:[1,25,33,37],fresh:[2,10,23],friendli:35,from:[0,3,4,5,6,7,8,10,11,13,15,16,17,19,20,23,24,26,28,29,30,32,33,35,36],from_dict:33,front:36,full:[0,2,4,7,8,10,12,16,23,24,29,33,35,37],full_nam:35,fulli:[0,2,3,17,29],fun:[33,37],fundament:[34,35],further:[2,23,26,30,32,34,36],furthermor:[3,17],futur:[2,6,19,20,21,26,30],gadget:36,gain:33,gather:37,gear:0,gender:37,gener:[0,2,3,4,11,13,16,17,24,25,27,29,30,32,35,36,37],gentoo:2,get:[0,1,2,9,10,11,22,23,24,25,26,27,29,31,32,33,34,37],get_conf:35,get_contain:35,get_descript:35,get_icon:35,get_nam:35,get_path:26,get_plugin:35,get_tooltip:35,get_transl:35,get_valu:35,git:[5,14,15,35],github:[1,2,23,27,29,35],github_org:35,github_usernam:35,gitk:15,gitter:2,give:[4,5,16,17,27,33,35,36,37],given:[0,2,3,5,14,15,25,33,35],glass:11,global:[3,16,17,32],gmail:35,gnu:[2,8,35],goal:34,going:[21,30,32,33,35,37],gone:32,good:[23,26,27,29,33,35,37],goog:33,googl:[2,29,33,37],got:24,graham:33,graph:[33,36,37],graphic:[2,3,10,13,33,35,36,37],great:[2,24,37],greater:37,green:[30,32,35,37],grew:33,grid:17,gross:33,group:[2,12,33,36,37],group_bi:33,groupbi:37,grow:33,growth:33,guarante:17,gui:[3,10,17,23,35,36],guid:[0,1,7,22,23,24,29,30,33,35,37],guidelin:[23,33,35],guru99:35,had:33,hamburg:[4,7,8,35],hand:[33,37],handi:4,handl:[23,35,37],handler:36,happen:[17,29,33,36,37],happi:[30,32],harpercollin:33,has:[0,3,4,7,10,15,17,24,27,29,32,33,35,36,37],hasn:29,have:[0,1,2,3,4,7,10,11,15,16,17,19,20,21,24,25,26,29,30,32,33,35,36,37],header:17,heart:30,heat:17,heatmap:17,heavi:33,heavyweight:33,height:37,hello:[30,32,35],help:[0,4,9,10,23,26,27,28,29,30,32,33,35],helper:35,her:37,here:[0,2,7,22,28,29,30,32,33,35,37],hesit:35,hidden:[5,35],hide:[4,5,12,17,20,30,32],hierarch:[5,14,32],high:[0,33,35],higher:[33,37],highest:[33,37],highlight:[0,3,6,8,12,16,23,30,32,35],hilpisch:33,hint:[0,25],his:37,hist:[33,37],histogram:[17,37],histori:[3,9,10,16,30,33,35],historic_crypto:33,historicaldata:33,histplot:37,hit:[19,33,37],hold:[33,35],home:[0,2,8,10,11,23,24,25,35],homebrew:2,hope:[30,33,35,37],hopefulli:[26,27],horizont:[4,30,37],host:10,hostnam:10,hour:29,hous:11,hover:[0,4,9,25],how:[0,1,2,3,4,5,10,12,13,19,23,24,27,29,30,32,33,34,36],howev:[0,2,5,25,30,33,35,37],html:[35,37],http:[33,35,37],hub:24,huge:23,human:35,hurri:35,husl:37,hyperlink:32,hypothesi:34,icon:[4,7,8,9,11,13,30,32,35],icon_manag:35,id_rsa:10,ide:35,idea:[29,35,36],ideal:[17,33,37],ident:[0,6,14,23],identif:37,identifi:[14,32,35,37],idl:0,ignor:[3,37],ill:[0,27,28],iloc:[33,37],ima:35,imag:[2,4,13,17,33,37],immedi:[2,20,26,37],implement:[24,25,33,35,36,37],impli:37,implicitli:30,impos:15,imposs:23,improv:[0,4,17,31,37],includ:[0,1,2,3,4,5,7,10,11,12,17,24,25,28,30,32,35,37],incompat:[0,2],incomplet:25,inconceiv:35,inconsist:37,incorpor:35,increas:[14,32,33,35],inde:[27,37],indent:29,independ:[2,35],index:[11,17,32,33],indic:[14,17,30,32,33,35,36,37],indistinctli:37,individu:[2,7,14,16,19,23,27,35,37],industri:33,influenc:37,info:[2,20,23,33,35],inform:[0,2,10,14,17,20,23,24,26,29,30,32,35,36,37],infrastructur:0,inher:17,initi:[33,35,36,37],inlin:[0,3,7,10,32],inner:[17,23,35],inplac:[33,37],input:[20,35,36,37],insert:[0,17,29,35,37],insid:[0,4,5,10,11,14,15,20,21,26,32,33,35,36],insight:33,inspect:[0,1,7,10,17,33,35,37],inspector:17,instal:[1,3,10,11,14,18,23,24,26,27,29,30,32,33,35,37],instanc:[10,17,23,25,26,35,36],instanti:35,instantpopup:35,instead:[0,2,5,12,17,23,26,27,32,33,35,37],instruct:[0,2,23,33,35,37],instrument:33,insuffici:7,int64:37,integ:37,integr:[2,3,4,10,15,21,33,35,37],intel:2,intellig:[16,33,37],intend:[33,37],intens:0,interact:[1,3,4,10,13,17,20,21,22,23,30,32,33,35,36,37],interchang:17,interconnect:36,interest:[33,35,37],interfac:[1,8,9,20,22,30,35,36],interfer:26,intermedi:33,intern:[0,7,23,29,35],internal_valu:32,interpret:[0,3,7,9,10,21,23,25,26,29,32,33,37],interquartil:37,interrupt:[7,10],interv:[35,37],intro:34,introduc:35,introduct:[30,35],introspect:25,invalid:[16,32],invest:33,investig:37,investor:33,invis:[5,8],invok:37,involv:[1,2,23,25,29,33,35,37],ipdb:9,ipykernel:[23,25],ipynb:20,ipython:[0,3,4,7,8,9,13,14,17,18,21,23,24,25,27,29,30,32],ipython_genutil:0,is_dark_font_color:32,isc:35,isn:[2,23,25,26,32],isol:[2,28],issu:[0,1,2,4,16,21,23,24,26,27,28,32,33,37],item:[0,1,4,9,12,14,17,19,20,21,23,25,29,32],iterrow:37,its:[0,1,2,4,5,7,10,11,12,14,16,17,23,24,25,26,29,30,32,33,35,36,37],itself:[0,2,10,14,17,23,24,26,33,35,36],jame:33,jnj:33,job:35,john:35,johnson:33,join:33,json:[0,10,37],juanita:[30,32],jump:[4,12],jupyt:[4,10,20,23,35,37],jupyter_cli:[23,25],jupyter_cor:[23,25],just:[0,2,3,8,11,12,15,16,17,21,23,26,27,30,32,33,35,37],kde:37,keep:[23,32,33,35,37],kei:[7,9,14,17,22,25,29,30,33,35],kera:37,kernal:10,kernel:[0,9,23,27,28,33,35,37],keyboard:[3,9,10,23,35],keyerror:37,keyfil:10,keyword:[4,11,32],kind:[32,33,35,37],kirkegaard:37,kitti:37,know:[23,32,33,35,37],knowledg:[33,35,37],known:[2,26,36],kurtosi:37,label:[0,35],lack:2,lambda:[33,37],languag:[0,1,2,4,10,23,24,25,33,35,37],larg:[0,17,24,32,33,37],larger:[32,33,37],largest:33,last:[4,8,15,23,25,26,27,33,37],later:[17,30,37],latest:[0,2,23,25],latter:[7,24],laugh:37,launch:[0,2,5,10,23,25,26,27,29,30,32,37],launchpad:2,layer:35,layout:[30,35],lead:[2,24,29],learn:[0,1,2,14,24,31,32,34],learner:34,learnpython:24,least:[0,24,26],leav:[33,37],left:[2,3,4,6,7,8,11,14,21,26,30,33,35,37],legaci:[10,35],len:[33,37],length:33,leptokurt:37,less:[29,33,35,37],lesser:33,let:[4,30,32,33,34,37],letter:[0,33,36],level:[1,4,12,14,16,17,32,33,35,37],leverag:33,librari:[2,3,11,25,30,32,33,35,36,37],libreoffic:32,licens:[0,35],lie:25,lies:[23,27],life:35,light:30,lighter:2,like:[0,2,3,4,5,8,11,14,15,16,17,23,25,27,29,30,32,33,35,37],limit:[4,21,25,35,37],limits_group:35,line:[0,2,3,6,8,14,16,18,23,25,26,27,29,30,32,33,35,36,37],linear:33,linestyl:37,linewidth:37,linger:23,link:[2,11,24,33,35],linux:[0,8,16,23,25,35,37],list:[0,3,4,5,6,8,10,11,12,13,14,16,20,23,24,25,27,29,30,32,33,35,37],listen:10,lite:2,litecoin:33,littl:37,load:[7,10,11,14,17,25,32,33,35,37],loc:33,local:[3,11,14,17,20,32,33,35,37],locat:[0,4,6,11,12,15,29,35],lock:[7,30],log:[33,35],logarithm:33,logger:35,long_descript:35,long_description_content_typ:35,longer:[17,32,35],longest:32,look:[2,10,11,16,20,23,24,27,29,30,32,33,35,37],loop:[33,36],loss:33,lost:[33,37],lot:33,lousi:33,lovabl:37,lover:37,low:33,lower:[23,32,33,37],lowercas:33,lowest:[33,37],lsp:[0,4,35],ltc:33,ltc_hist:33,lxml:33,mac:23,machin:[0,10,17,23,32,33,35,37],maco:[0,3,8,10,16,19,20,21,23,25,30,33,35,37],macport:[0,2,29],made:[4,35,37],magic:3,magnifi:11,mai:[0,2,23,25,26,32,33,35],main:[0,2,17,30,31,35,36],main_contain:35,main_fg_color:35,main_sect:35,mainli:[33,37],maintain:[0,24,35],mainwindow:[26,32,36],major:[2,23,35],make:[0,2,4,5,8,11,15,20,21,23,25,26,27,29,32,33,35,37],makefil:35,malici:17,mamba:[2,35],mambaforg:2,manag:[0,1,2,5,10,17,23,24,32,33,35,37],mandatori:35,mani:[0,2,4,5,10,19,23,24,27,30,33,36,37],manipul:[33,35,37],manual:[0,2,4,7,13,14,16,17,25,26,29,32,33,35,37],map0logo:35,map:[0,17,35],mapologo:35,mark:[8,17,35,37],markdown:35,market:33,master:33,match:[4,5,6,11,13,17,30,32,37],math:[10,30,33],mathemat:33,matlab:4,matplotlib:[0,2,9,10,17,24,30,32,33,37],matpotlib:2,matrix:36,matter:[33,37],matur:37,max:[17,33,37],max_:35,max_ag:37,max_ylim:37,maxim:[29,33],maximum:[6,33,37],mdi:35,mean:[0,1,2,23,25,26,32,35,36,37],meanwhil:14,measur:[14,32,33,35,37],median:37,meet:35,memori:[0,2,14,33,37],mention:[0,22,25,35,36],menu:[0,2,3,4,6,7,9,11,14,15,19,20,21,23,25,29,30,32,35,37],mere:37,merg:33,messag:[0,2,10,16,23,25,27,29,32,35,36],message_nam:16,met:37,meta:2,metapackag:2,method:[0,4,7,12,14,23,25,26,27,32,33,35,36],microsoft:33,might:[0,2,8,16,23,24,25,29,32,37],mile:37,millisecond:[19,35],min:[17,33,35,37],min_:35,min_ag:37,min_ylim:37,mind:[35,37],miniconda:[0,2,33,35,37],miniforg:[0,2],minim:[0,2,33,35,37],minimum:[33,35,37],minor:[23,35],mint:2,minut:35,miss:[2,29,35,37],misunderstand:24,mit:35,mix:2,mixin:35,mkdir:37,mkvirtualenv:2,modal:36,mode:[3,4,9,35],model:[0,33,37],modern:0,modest:[2,33,37],modifi:[0,4,5,10,17,20,30,35,37],modul:[3,7,9,11,15,16,25,32,35],moment:[19,20,21,35],monei:33,monitor:30,month:[23,33],monthly_data_1:33,monthly_data_2:33,more:[0,1,2,4,10,12,14,16,17,19,21,23,24,25,29,30,32,33,35,36,37],most:[0,2,4,14,22,23,25,26,27,30,32,33,35,36,37],mostli:35,mous:33,move:[5,11,30,32,33,35,37],movement:33,mpl:33,msft:33,much:[0,2,4,17,23,29,32,33,35,37],multi:[4,17],multiindex:17,multilin:3,multipl:[4,5,12,37],multiplatform:[35,36],multipli:33,multitask:33,must:[0,10,15,19,33,35,37],mute:[10,32],mvp:33,name:[0,2,3,4,5,7,10,11,12,14,15,16,17,20,25,30,32,33,35,36,37],namespac:[4,10,17],narrow:23,nativ:[13,35,36],natur:[33,37],navig:[0,2,6,8,9,11,12,23,26,30,32,33,35,36],neat:37,necessari:[10,30,32,35],need:[0,1,2,4,6,8,10,25,26,29,33,35,36,37],neg:[33,37],neither:37,neovim:4,nest:12,netflix:33,netflix_info:33,network:[0,35,36],never:30,newer:[2,24],newest:10,newli:[35,37],next:[2,4,10,19,21,25,30,32,33,35,37],nflx:33,non:[0,8,32,33,35,36],none:[4,13,23,25,26,35],nor:37,norm:33,normal:[3,8,33,37],notabl:33,notat:37,note:[0,10,30,32,33,35,37],notebook:[0,4,10,18,24,25,37],noth:[0,14,25,37],notic:[32,33,35,37],notif:[35,36],notifi:36,now:[0,2,19,30,32,33,35,37],nowadai:33,npy:17,num_group:37,num_observ:37,number:[2,3,4,5,6,8,10,14,16,17,19,24,25,32,33,35,37],numer:[2,17,37],numfocu:0,numpi:[2,10,24,30,32,33,37],object:[0,4,7,9,10,11,14,30,32,33,37],observ:[26,29,33,37],obtain:[2,19,30,34,37],obviou:35,occasion:[25,26],occupi:[33,37],occur:[0,14,25,27,29,37],occurr:[6,8,32],odp:37,off:[7,10,13,16,32],offer:[2,3,4,5,13,17,23,24,32,33,35,36,37],offici:[33,35,37],offset:33,often:[2,10,23,27,29,30,37],okai:35,okcupid:37,old:[2,37],older:[2,30,37],on_clos:35,on_conf_chang:35,on_initi:35,on_plugin_avail:35,on_preferences_avail:35,on_statusbar_avail:35,on_toolbar_avail:35,onc:[0,4,5,10,15,25,26,29,30,32,33,35],one:[0,1,2,4,5,10,12,13,15,16,17,23,25,26,29,30,32,33,35,36,37],ones:[4,20,30,32,37],onli:[0,2,4,5,6,7,10,14,17,23,25,26,27,32,33,35,36,37],onlin:[7,9,32,37],open:[0,1,2,3,4,5,6,7,10,11,12,14,15,16,17,20,21,25,26,27,29,30,32,33,35,36,37],open_source_licens:35,opencollect:0,opensus:2,openteam:2,oper:[0,2,8,9,15,30,32,33,35,37],opt_weight:33,opt_weights_1:33,opt_weights_2:33,optim:[14,31,35],optimal_weight:33,option:[0,2,3,4,7,9,15,18,21,23,24,30,32,33,35,36,37],option_correct:37,order:[1,8,12,19,20,21,23,29,33,35,37],org:[2,33,35,37],organ:[0,33,35,36],orient:[2,33,37],origin:[23,25,37],other:[0,3,4,8,10,14,16,17,23,24,26,27,29,30,32,33,35,36,37],otherwis:[0,2,10,25,29,33,35],our:[0,2,22,23,24,27,29,30,32,33,34,37],out:[1,2,4,11,16,20,21,23,25,27,29,30,32,33,37],outlier:37,outlin:[4,9,30,32,33],output:[4,14,16,23,26,29,30,35,37],outsid:[4,20,25,37],over:[4,5,7,14,30,32,33,35,36,37],overal:[16,32],overflow:[0,23,27],overli:37,overrid:[25,35],overview:[33,37],own:[0,2,4,7,11,14,23,24,27,30,33,35,36],owner:37,p_valu:37,packag:[0,1,2,3,10,11,15,16,19,23,24,25,26,27,29,32,33,37],packt:33,pad:20,page:[0,2,10,11,23,29,32,34],paid:[0,24],palett:37,palm:35,palplot:37,pan:3,panda:[2,17,24,32,33,37],pane:[0,1,19,20,21,22,23,25,29,30,31,35],panel:[2,12,30,33,36,37],paper:[35,37],parallel:36,paramet:[4,33,35,37],parent:[14,35,36],parenthes:37,parenthesi:[4,7],parquet:37,pars:[6,32],parsed_data_publ:37,parser:32,part:[0,4,5,22,26,33,35,37],parti:[2,3,10,11,32,35],partial:37,particip:[33,35,37],particular:[14,23,32,35,37],particularli:[2,5,23,24,26,32,33],partit:0,pass:[33,35,36,37],password:[10,35],past:[5,10,13,16,17,20,21,29,32,35],patch:28,path:[0,4,5,10,12,14,15,16,19,23,26,30,32,33,35,37],pathlib:35,pattern:5,paus:[26,35],pause_pomodoro_tim:35,pause_tim:35,pause_timer_act:35,pct_chang:33,pdb:3,peopl:[33,37],pep:4,per:[0,4,19,33],percent:33,percentag:[19,33],perfect:33,perform:[0,5,11,14,15,17,23,32,33,35,37],period:[33,35,37],permiss:26,persist:[17,33,37],person:[2,35,37],pet:37,pfe:33,pfizer:33,phenomenon:37,phrase:8,pick:37,pickl:17,pictur:35,pid:10,piec:[33,35,37],pin:2,pip:[0,23,25,29,33,35],pitfal:23,pivot:37,plabel:35,place:[0,4,19,23,24,27,33,35,37],plai:35,plain:[7,16,29,30],plan:35,platform:[2,28,33,37],pleas:[2,23,25,27,29],plot:[3,4,9,10,17,20,30,32,35],plt:[33,37],plu:[6,20,32],plug:25,plugin:[0,2,9,19,20,21,24,27,28,34,36],plugin_registr:35,plugin_typ:35,pluginconfigpag:35,pluginmaincontain:35,pluginmainwidget:35,png:[13,32],point:[0,3,14,24,30,33,35,36,37],pointi:37,polar:33,polish:37,pomodoro_button:35,pomodoro_default:35,pomodoro_limit:35,pomodoro_menu:35,pomodoro_spin:35,pomodoro_tim:35,pomodoro_timer_button:35,pomodoro_timer_menu:35,pomodoro_timer_statu:35,pomodoro_timer_toolbar:35,pomodoromenusect:35,pomodorotimerstatu:35,pomodorotoolbaract:35,pomodorotoolbarsect:35,pop:[2,4,30],popular:[4,25,37],popup:7,popupmod:35,port:[2,10],port_1_exp_r:33,port_1_ow:33,port_1_sr:33,port_1_vr:33,port_2_exp_r:33,port_2_ow:33,port_2_sr:33,port_2_vr:33,portfolio:34,portfolio_return:33,portfolio_shap:33,portfolio_sharp:33,portfolio_volatil:33,portion:[7,29],pose:37,posit:[12,30,32,33,37],possibl:[4,19,20,21,23,27,29,33,35,37],post:[2,24,26],pot:35,potenti:[2,4,16,32,37],power:[1,4,16,20],powershel:21,ppf:37,pprint:33,practic:[16,32,35,37],pre:36,preced:29,precis:[33,37],predefin:35,predict:[33,37],prefer:[0,2,3,4,5,7,8,10,11,13,17,18,23,26,29,30,32,33,37],prefil:29,prefix:[35,37],prepar:34,prerequisit:34,presenc:35,present:[15,19,25,29,33,35],preset:35,press:[0,3,4,6,7,11,14,16,20,30,32,33,36,37],prettier:37,prev_year:33,prevent:[10,13,32],preview:[4,17,30],previou:[3,4,10,11,14,16,23,25,30,32,33],previous:[7,20,30,32],price:33,primari:[4,10,32,33],principl:35,print:[0,26,29,30,33,35,36,37],printf:17,prior:[33,35,37],prioriti:[2,29],probabl:37,problem:[0,1,2,4,16,24,26,27,28,29,32,33,35,37],proce:[2,33,37],procedur:[14,33,36],process:[3,4,10,23,35,36,37],processor:[0,13,32],produc:[13,37],product:[26,33,35],profil:[0,1,9,16,18,30,32,34,35],profit:[0,33],program:[2,5,21,23,24,27,30,32,33,35,37],progress:[14,35],prohibit:0,project:[0,1,4,5,6,9,12,32,35],project_nam:35,project_package_nam:35,project_pypi_nam:35,project_short_descript:35,prompt:[0,2,3,16,19,20,21,23,25,26,29,30,32,33,35,36,37],proofread:1,properli:35,properti:[33,35],proport:[33,37],protocol:[4,25],proven:37,provid:[1,2,4,10,11,13,17,23,24,25,26,29,30,32,33,35,36,37],proxi:37,psycholog:37,psychometr:37,pt_limits_layout:35,publish:[34,37],pure:7,purelib:26,purpos:[0,1,35,37],put:[33,35,37],py39:2,py3:[8,23,35],pyarrow:37,pyc:35,pycodestyl:4,pydata:[2,37],pydoc:11,pyenv:0,pyflak:4,pyl:[0,25],pylab:10,pylint:[16,32],pylintrc:[16,32],pypi:[0,33],pypi_usernam:35,pyplot:[33,37],pyqt5:2,pyqt:[23,29,35],pysid:35,python3:[2,26],python:[0,1,2,3,4,5,7,10,11,12,16,17,19,21,23,25,26,27,28,29,30,32,35],pythonpath:15,pyzmq:[23,25],q18154:37,q255:37,q997:37,qaction:[35,36],qapp:36,qapplic:36,qdialog:36,qdockwidget:35,qevent:36,qgridlayout:[35,36],qgroupbox:35,qhboxlayout:36,qicon:35,qmainwindow:[35,36],qmenu:36,qmessagebox:35,qspinbox:35,qstackedlayout:36,qt5:3,qt_mac_wants_lay:0,qta:35,qtawesom:35,qtconsol:[10,23,24,27,29],qtgui:35,qtimer:35,qtoolbar:36,qtoolbutton:35,qtpy:35,qtwidget:35,qu4nt:35,qualit:37,qualiti:[16,31],quansight:0,quantit:37,quantiti:17,queri:33,question:[1,2,24,27,33,37],question_data:37,quick:[2,20,24,30,33,37],quickli:[4,23,25,27,32,35,37],quickstart:[1,33,37],quirk:24,quit:[2,33,35,37],quotat:17,qvboxlayout:[35,36],qwidget:[35,36],rais:37,ram:0,ran:14,ranaroussi:33,random:[29,33,37],randomli:33,rang:[1,16,24,33,37],rapid:33,rate:35,rather:[12,21,23,29],ratio:37,raw:16,rcfile:16,rcparam:33,reach:[1,33,35,37],read:[2,4,23,26,27,34],read_csv:[33,37],read_parquet:37,read_text:35,readabl:[4,35,37],reader:35,readi:[20,30,32,33,35,37],readm:35,real:[4,10,25,33,35,37],realist:33,realiti:33,realized_pr:33,realli:[23,37],realtim:11,rearrang:30,reason:[2,14,32,37],recal:[3,14,32],receiv:[23,25,27,33,36],recent:[0,4,8,16,20,23,33,35],recogn:[0,35],recommend:[0,2,26,27,28,33,35,37],record:[26,33,37],recov:17,recreat:[2,33],recurs:14,red:[10,11,30,33],redistribut:0,reduc:[32,37],reduct:37,refactor:37,refer:[2,3,25,26,33,35,37],refin:6,reflect:33,refresh:[10,11,17,33],regardless:[4,15,35],regex:37,regist:10,register_plugin_prefer:35,regul:37,regular:[3,4,6,32,35,37],reilli:33,reinforc:33,reinstal:[0,26,27,28],rejoic:37,rel:[0,2,5,32,33],relat:[2,9,23,26,27,28,33,34,35,36],relationship:[33,35,37],relaunch:10,releas:[0,2,23,35],relev:[4,23,25,27,29,37],reli:35,reliabl:[2,17],reload:[9,11,35],remain:[32,37],remark:33,rememb:[8,10,16,33,35,37],remotemachin:0,remov:[0,2,10,13,14,17,23,30,32,35,37],renam:[5,10,17,21,25,33,35,37],rename_axi:33,render:[4,7,11,13,35,36],reoccur:23,reopen:23,reorder:4,repair:26,repeat:35,replac:[0,16,25,26],repo:[1,35],report:[0,2,23,25,26,27,28,34],repositori:[0,1,2,5,14,15,25,33,34],repres:[33,36,37],represent:36,reproduc:[23,29],request:[2,33,35],requir:[0,1,25,33,35,36,37],resampl:33,reset:[0,8,23,26,30,35],reset_index:33,residu:37,resiz:17,resolv:[1,2,23,25,26,35],resourc:[0,1,23,27,28,33,35],resp:37,resp_:37,resp_q18154:37,resp_q255:37,respect:[3,13,16,30,33,35],respond:35,respons:[36,37],rest:[14,30,32,33,35,37],restart:[0,8,10,19,20,21,23,25,30,35],restor:[4,15,23],restrict:0,result:[0,4,6,9,11,16,17,19,25,26,27,30,32,33,35,37],retriev:7,retrieve_data:33,rets_1:33,rets_2:33,reveal:37,review:33,rgb:17,rich:[2,7,30],right:[0,2,3,4,5,6,7,8,10,11,12,13,14,17,20,21,25,30,32,33,35,37],right_answ:37,rigor:37,ring:35,risk:33,riski:33,robust:2,room:24,root:[15,33,35],roughli:33,routin:26,row:[17,33,36,37],rule:[26,36,37],run:[1,3,5,9,10,11,16,17,19,20,21,23,25,26,29,30,32,33,35,36],runtim:[10,25,32],safer:33,sage:37,sai:[32,33,37],said:33,same:[1,2,3,4,10,14,15,20,23,25,27,30,32,33,36,37],sampl:[29,37],satisfi:37,save:[2,4,6,10,13,14,15,17,20,32,33,36,37],savefig:33,scalar:17,scale:[0,13,24,33],scatter:33,scenario:33,scheme:[23,35],scienc:[28,35,36,37],scientif:[0,1,2,32,33,34,35],scientist:[1,33,37],scikit:0,scipi:[2,28,33,37],scope:[6,14,16,19,35,37],score:[16,32,37],scraper:37,scratch:[17,20],screen:[20,25,36,37],screenshot:33,script:[0,2,4,5,10,16,19,23,30,32,33,37],scroll:[0,2,4,30,32],scrollbar:4,sdist:35,seaborn:37,seamlessli:[33,37],search:[2,4,9,11,17,24,29,32,33,37],second:[14,30,32,34,35,37],section:[0,1,2,4,16,23,25,26,27,29,30,32,33,35,37],secur:[2,17,26,33],see:[0,2,3,4,5,8,10,16,17,19,20,21,23,25,26,27,29,30,32,33,35,37],seek:2,seem:[25,33,37],seen:[30,33,37],segment:33,select:[0,2,3,5,6,7,8,10,12,13,16,17,19,20,21,25,29,30,32,33,35,36,37],self:[35,36,37],send:36,sens:33,sensit:[4,6,11],sep:37,separ:[3,4,10,12,16,30,33,37],sequenti:13,seri:[1,17,33,37],serif:33,seriou:37,serv:[20,33,35,36,37],servedoc:35,server:[0,4,11,20,25,35],servic:[0,24,35],session:[3,8,10,13,15,17,30,33,37],set:[0,1,2,3,4,5,6,10,12,15,16,17,21,26,30,32,34],set_axis_label:37,set_label:33,set_palett:37,set_pomodoro_limit:35,set_printopt:33,setcolumnstretch:35,setlayout:35,setmenu:35,setpopupmod:35,setup:[23,35],setup_pag:35,setuptool:35,sever:[3,4,5,10,13,17,29,30,32,33,35,36,37],sexual:37,shape:37,share:[33,34],sharpe_ratio:33,sharpli:33,shell:[21,23],shift:[0,3,4,12,33,35],shortcut:[0,2,3,7,8,9,10,14,16,23,26,32,35],shorten:36,shotgun:23,should:[0,16,17,23,25,26,27,29,30,35,37],show:[3,4,5,7,8,10,11,12,16,17,19,27,29,30,32,33,35,36,37],shown:[4,7,8,10,13,15,17,19,29,32,35],side:[33,35,37],sidebar:[4,32],sierra:0,sign:[4,12,33,37],signal:35,signific:[2,37],significantli:[33,37],silenc:32,sim_weight:33,similar:[0,2,4,10,23,29,33],similarli:35,simpl:[1,33,35,37],simpler:35,simpli:[0,2,7,10,17,25,26,27,29,32,35,37],simplic:37,sinc:[20,23,29,32,33,35,36,37],singl:[5,16,26,33,35,36],site:[0,24,35,37],situat:[0,29,33,37],six:[19,35],size:[2,4,5,11,13,17,30,32,33,37],skew:37,skill:[33,35],skip:[3,33,37],slabel:35,sleep:14,sleep_wrapp:14,slightli:37,slow:0,slower:33,smaller:[2,33,37],smallest:[14,33],smarter:37,smartscreen:2,smoother:33,snippet:[3,4],sns:37,softwar:[1,26,35],sold:33,solut:[25,27,28],solv:[0,1,2,23,26,27,29,33,37],some:[2,4,7,22,25,26,27,30,32,33,35,36,37],someon:27,someth:[23,24,25,26,27,33,36,37],sometim:[2,32,33],somewhat:[2,37],soon:29,sort:[4,12],sourc:[0,1,2,4,7,10,11,12,16,17,19,23,24,25,26,27,30,32,35],space:[2,4,32,35,37],speak:37,special:[9,12,25,29,33,35,36,37],specif:[0,2,3,4,5,10,11,16,23,24,25,27,29,32,33,35,36,37],specifi:[14,29,32,33,35,37],speed:[10,32],spend:35,spent:[14,19,32],sphinx:[7,35],spinbox:35,spinner:35,split:30,spoiler:37,sponsor:0,spot:4,spotlight:2,spydata:17,spyder3:2,spyder5:35,spyder:[3,4,5,7,8,10,14,15,16,17,22,26,27,28,29,31,34,36],spyder_kernel:[0,10],spyder_pomodoro_tim:35,spyder_unittest:25,spyderpomodorotim:35,spyderpomodorotimerconfigpag:35,spyderpomodorotimercontain:35,spyderwidgetmixin:35,squar:[11,33],ssh:10,sshd:10,stabl:[23,33,35],stack:[0,2,23,27,33,36],stage:[0,37],stai:[1,32,37],standalon:[0,19,20,21,29,33,35,37],standard:[0,3,4,11,16,17,23,25,27,32,35,36,37],start:[0,1,2,4,10,12,17,23,24,26,27,28,29,31,32,33,34,36,37],start_i:33,start_pomodoro_tim:35,start_tim:35,start_timer_act:35,start_year:33,startswith:37,startup:[2,26],stat:37,state:[17,35,37],statement:[3,8,14,35,37],statist:[33,37],statu:[25,30,35,36],statusbar:[0,35],statusbarwidget:35,std:33,steadi:33,step:[0,1,2,3,4,7,10,25,26,28,29,31,33],still:[0,2,3,10,25,27,32,33,37],stop:[0,2,3,10,11,14,16,35],stop_pomodoro_tim:35,stop_tim:35,stop_timer_act:35,store:[6,8,17,20,30,33,37],str:37,straightforward:[2,8],strict:2,string:[4,6,25,32,33,35,37],stroke:[13,33],stronger:19,strongli:[0,2,10,23,27],structur:32,style:[16,17,30,32,33,35,37],stylist:37,sub:[14,27,32],subdirectori:5,subject:2,submenu:25,submit:[0,1,2,24,26,27,28],subplot:37,subprocess:0,subscrib:2,subsect:[4,12],subset:37,substitut:[2,35],subsystem:0,succe:16,success:[0,35],successfulli:26,sudo:2,suffix:35,suggest:[3,23,33,37],suit:[5,11],suitabl:35,sum:[33,37],summar:[33,37],summari:[1,2,4,7,33,35,37],supervis:33,support:[0,2,4,8,9,17,19,23,25,27,33,37],suppos:[14,33],suppress:[16,32,33],sur:0,sure:[0,2,11,23,24,25,26,27,29,32,35,37],surround:13,svg:13,switcher:12,symbol:[10,33],symbols_1:33,symbols_2:33,symmetr:37,sympi:[2,10,24,33,37],synchron:32,syntax:[0,3,8,17,23,30,35],sys:[0,10,26],sysconfig:26,system:[0,2,5,8,10,15,21,23,26,29,32,35,36,37],systemat:37,tab:[0,3,5,10,12,13,19,20,21,30,32,33,36,37],tabl:[0,25,33],tag:35,tail:37,take:[0,1,19,20,29,30,32,33,35,37],taken:[14,19,32,33,37],talent:35,tar:35,task:[2,32,33,35,36,37],taskbar:2,tast:2,team:[2,24,29,35],technic:[10,37],techniqu:[26,35],technolog:33,tell:[27,32,35,37],templat:[4,29,35],temporari:20,ten:17,tend:[23,33],tensorflow:37,term:[0,33],termin:[0,2,16,18,19,20,23,25,26,32,33,35,37],test:[10,25,33,34],test_item:37,text:[0,4,5,6,7,8,16,17,21,30,32,35,36,37],textbox:7,than:[0,2,12,17,21,23,24,25,29,32,33,35,37],thank:[2,33,37],thei:[0,2,3,5,10,17,24,30,33,35,36,37],them:[2,3,4,5,6,7,13,14,17,19,20,24,29,30,32,33,35,36,37],theme:[0,4,30],themselv:37,theoret:[33,37],theori:[33,34],therefor:[2,14,32,33],thi:[0,1,2,3,4,5,6,7,8,10,12,13,14,15,17,19,20,21,23,24,25,26,29,30,32,33,35,36,37],thin:13,thing:[35,36,37],think:[34,35],third:[2,3,10,11,32,34,35,37],this_directori:35,thoroughli:30,those:[10,13,17,22,23,24,25,26,27,30,32,33,35,36,37],though:[2,23,30],thought:37,thousand:[32,33,35],three:[14,29,30,32,33,35,37],through:[0,1,2,3,4,6,7,10,11,13,17,22,24,32,35],throughout:[22,33,35,37],thu:[2,35,36,37],ticker:33,time:[3,4,10,14,15,19,25,26,29,32,33,35,36],timeit:3,timeout:35,timer:34,timestamp:[8,32],tip:35,titl:[11,29,33,35],to_datetim:32,todai:37,togeth:[33,35,37],toggl:[5,6,7,8],token:33,told:32,tolist:37,too:[16,17,20,30,37],took:[14,32],tool:[0,1,2,4,5,32,33,35,37],toolabr:35,toolbar:[0,3,4,5,9,12,16,30,32,33,37],toolbox:32,toolkit:[35,36],tooltip:35,top:[4,5,6,7,8,11,12,13,14,17,20,30,32,35],topic:[2,11,33,37],total:[4,14,19,32],touch:35,tour:22,toward:[14,33,37],tqdm:33,traceback:[25,26,27,29],track:[24,32],tracker:[1,2,23,27,29],trackpad:33,trade:33,traitlet:25,transact:33,transcript:[30,32],transform:[33,37],translat:35,transpar:37,treat:[4,17],tree:[15,35],trend:33,tri:29,triangular:37,trick:28,tricki:[2,27],trigger:[3,4,7,29,35,36],troubleshoot:[1,2,4,24,25,27,29],trust:17,tune:32,turn:[7,10,14,16,32],tutori:[1,7,30,33,35,37],tweak:35,twine:35,two:[4,14,17,30,32,33,35,36,37],type:[0,2,4,5,7,10,14,17,21,25,26,30,32,33,34,36,37],typic:[0,2,4,8,10,35],tzf:35,ubuntu:0,ultim:33,umr:10,unabl:[2,25],uncheck:[10,17,30,33],under:[0,2,3,4,5,6,7,10,13,14,16,17,19,20,21,23,25,26,29,30,32,37],undermin:37,underneath:14,understand:[4,9,24,30,32,33,35,37],understood:33,undesir:33,undivid:35,undock:[21,30,35],uninstal:[2,23,26,27],unintend:2,uniqu:[1,37],unit:[14,33],unittest:[0,25],unix:2,unless:[2,10,23],unlik:[4,27,29],unscientif:37,unsupervis:33,unsystemat:37,until:[23,33,35,36],unus:32,unusu:29,unzip:37,updat:[17,23,25,30,32,33,37],update_act:35,update_tim:35,upgrad:[2,23],upper:[21,33,35,37],uppercas:33,upward:37,url:35,usabl:0,usag:[2,9,14,24,29],usd:33,use:[0,1,2,3,4,5,7,10,11,12,13,15,19,20,21,23,24,30,32,35,36,37],used:[0,2,3,5,10,12,15,17,24,25,32,33,35,36,37],useful:[2,4,5,7,13,17,24,26,30,32,33,35,37],user:[0,1,2,4,6,8,10,15,16,20,23,24,25,26,27,30,32,35,36,37],usernam:[0,8,10,35],uses:[0,4,17,25,35],using:[0,2,3,4,5,7,12,14,16,17,19,20,21,23,24,25,26,30,32,33,35,36,37],usual:[0,2,10,23,26,35,36],util:[35,36,37],valid:[35,37],valu:[16,17,30,32,33,35,37],value_count:37,vari:33,variabl:[0,2,3,4,9,10,12,13,20,26,30,32,34,35],varianc:[33,37],variat:[33,37],varieti:[0,1,4,17,23,25,32,33,37],variou:[17,25,33,35],vast:37,vector:33,venv:[0,2,23],verbos:23,veri:[8,17,23,24,30,32,33,35,36,37],verifi:[35,37],versa:26,versatil:37,version:[0,2,9,10,21,23,29,30,33,35],vertic:[4,30,35],via:[0,2,3,7,10,15,17,26,35],viabl:2,vibrant:24,vice:26,video:[0,1,23,24,30,32],view:[3,4,5,6,8,11,12,15,16,19,20,21,23,25,27,29,30,32,33,35],viewer:[9,30],violat:[16,37],virtual:[0,2,35,37],virtualenv:[0,23],virtualenvwrapp:2,visibl:[16,25,32,36],visit:[0,1,2,11,14,23,33,35,37],visual:[1,17,33,34,35,36],vlayout:35,volat_ret:33,volum:33,vscode:[4,25],wai:[0,1,2,3,5,8,13,19,20,21,23,28,30,32,33,35,36,37],walk:22,want:[0,2,3,4,5,6,10,11,13,17,20,25,27,29,30,32,33,35,37],warn:[2,4,32,33,37],warren:33,watch:[0,1,23,35],web:[0,1,2,11,20,29,32,35],webpag:0,websit:[2,25,35,37],weight:2,weights_1:33,weights_2:33,weim:33,welcom:[2,20,22,23],well:[0,3,4,17,23,24,25,26,30,33,35,37],were:[23,33,35,37],what:[0,2,4,23,28,30,32,33,34,36,37],whatev:[4,23,25,33],wheel:35,when:[0,2,4,5,7,8,10,11,12,17,19,20,21,30,32,33,35,36,37],whenev:[0,10,23],where:[2,4,6,11,14,16,17,20,24,28,30,32,33,35,36,37],wherev:[13,23,32],whether:[8,10,15,25,29,33,35,37],which:[0,1,2,3,4,5,6,7,10,11,12,13,14,15,16,17,20,23,25,26,29,30,32,33,35,36,37],whisker:37,whitespac:32,whl:35,who:[2,30,33,37],whole:[0,4,16,32],why:[16,23],wick:37,wide:[1,35,37],wider:[0,32,37],widget_class:35,width:33,wiki:2,window:[0,3,8,16,19,20,21,23,25,26,29,30,32,33,35,37],winpython:[0,2],wish:19,within:[0,11,14,16,29,32,33,35,37],without:[0,2,5,7,10,15,16,25,30,32,33,35,37],wizard:2,won:[0,10,27,29],word:[4,8,13,32,34],work:[0,2,3,4,5,6,9,10,16,17,19,20,21,23,26,27,28,29,30,31,34,35],workaround:0,workflow:[7,30],workon:2,workshop:[33,35,37],world:[1,30,33,35,37],worri:37,worth:33,would:[4,14,23,30,33,35,37],wouldn:37,wrap:8,write:[32,33,34,35],written:[1,23,25,27,30,33,37],wrong:[26,32,37],wrote:35,wsl2:0,wsl:0,x64:0,xlabel:[33,37],yahoo:33,year:[33,37],yes:35,yet:[2,33],yfinanc:33,ylabel:[33,37],ylim:37,you:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,29,30,32,33,35,37],young:37,your:[0,2,3,4,5,6,7,8,10,11,13,14,15,16,17,19,20,21,23,24,25,26,27,28,30,31,33,34,37],your_usernam:[23,25],yourself:[17,23],yve:33,zeneca:33,zero:[33,35],zodiac:37,zoom:[3,11,13,20,21,32],zsh:21},titles:["Frequently Asked Questions","Welcome to Spyder\u2019s Documentation","Installation Guide","Debugger","Editor","Files","Find","Help","History","Panes in Depth","IPython Console","Online Help","Outline","Plots","Profiler","Projects","Code Analysis","Variable Explorer","Spyder Plugins","Spyder Line Profiler","Spyder Notebook","Spyder Terminal","Quickstart","Basic First Aid","Calling for Help","Common Illnesses","Emergency CPR","First Steps","Troubleshooting","Submit a Report","First Steps with Spyder","Intro Videos","Working with Spyder","Financial Data Analysis with Spyder","Workshops","Plugin Development with Spyder","Qt Fundamentals","Scientific Computing and Visualization with Spyder"],titleterms:{"class":4,"default":35,"final":[33,35,37],"function":[4,17,33],"import":7,"return":33,"try":2,Age:37,IDE:33,The:[35,37],Using:[0,2,6,8,10,11,15,16,19,20,21,33],With:[33,37],abil:37,about:0,action:[35,36],activ:37,add:35,addit:[2,20],advanc:[3,8,16,17,26],aid:23,all:25,altern:2,anaconda:[2,24],analysi:[4,16,33,37],analyz:16,anoth:25,anova:37,arrai:17,ask:0,associ:5,attributeerror:25,automat:[4,7],base:2,basic:[23,30,36,37],beyond:32,breakpoint:3,bug:25,build:[2,35,37],button:17,call:24,can:[35,37],cannot:25,carlo:33,cell:4,chang:[10,35],channel:24,check:35,choos:6,code:[1,4,16,32,33,37],cognit:37,command:[33,37],common:[25,26],commun:1,comparison:33,compat:25,complet:[4,25],compon:[4,36],comput:37,conda:[2,33,37],configur:[4,35],connect:[10,20],consol:[10,20,33,37],contain:35,contribut:1,control:[5,7,15,35],cpr:26,creat:[15,35],cryptocurr:33,custom:30,daili:33,data:[24,33,37],datafram:17,dataset:[33,37],debian:2,debug:[3,23],debugg:3,depend:25,depth:9,develop:[2,35],deviat:33,dialog:36,dictionari:17,directori:37,discov:35,distribut:[2,37],doc:1,docstr:25,document:[1,24],doe:25,download:[2,33,37],edit:4,editor:[4,33,37],emerg:26,enhanc:35,environ:[2,33,35,37],error:25,event:36,exchang:24,expect:33,explain:33,explor:[17,33,37],extern:10,faq:24,featur:[3,4,10,35],file:[4,5,37],financi:33,find:[4,6],first:[23,27,30,33,35],fit:13,format:[4,37],found:25,frequent:0,from:[2,27,37],fundament:36,further:[33,35,37],gener:33,get:[7,30,35],gitter:24,glanc:33,goal:[33,35,37],googl:24,group:24,guid:2,has:25,help:[1,2,7,11,24,25,37],here:27,highlight:4,histor:33,histori:8,homework:[33,35,37],hover:7,how:[35,37],hypothesi:37,icon:12,ill:25,importerror:25,improv:32,includ:29,incompat:25,inform:33,inlin:13,instal:[0,2,19,20,21,25],interest:1,interfac:4,interpret:14,intro:[31,33,37],introduct:[33,37],introspect:4,ipdb:3,ipython:[10,20,33,37],isol:23,issu:[25,29],item:11,join:1,jupyt:24,kei:4,kernel:[10,25],keyboard:4,layout:36,learn:[30,33,35,37],learner:[33,37],let:35,line:[4,19],lint:4,linux:2,list:17,local:10,look:1,lsp:25,maco:2,main:32,matplotlib:3,mean:33,media:1,menu:[5,8,10,12,13,16,17,36],method:[2,37],miss:25,mode:7,modul:10,mont:33,monte_carlo_sharp:33,monthli:33,mute:13,navig:4,notebook:20,now:1,numpi:17,object:[17,25],obtain:33,offici:24,onlin:[2,11],openteam:24,oper:5,optim:[32,33],option:[5,6,8,10,12,13,16,17,20],org:24,other:[2,25],our:[1,35],outlin:[12,13],overflow:24,packag:35,page:[24,35],pane:[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,32,33,37],panel:4,part:1,patch:23,pharmaceut:33,pip:2,platform:24,plot:[13,33,37],plugin:[14,18,25,35],pomodoro:35,pomodorotimertoolbar:35,portfolio:33,prefer:[21,35],prepar:[33,37],prerequisit:[33,35,37],problem:[23,25],profil:[14,19,33,37],project:[15,24],propag:35,publish:35,pypi:35,python:[24,33,37],qualiti:32,question:0,quickstart:22,ratio:33,read:[33,35,37],realiz:33,recommend:23,regist:35,reinstal:23,relat:[3,4,5,6,7,8,10,11,12,13,14,15,16,17,24,37],religion:37,reload:10,remot:10,replac:4,report:[29,37],repositori:35,research:37,resourc:24,result:14,review:35,run:[0,2,4,14,37],scienc:24,scientif:37,scipi:24,search:6,second:33,section:24,select:4,selector:4,serios:37,set:[33,35,37],share:37,sharp:33,shortcut:4,should:33,show:13,signal:36,simul:33,slot:36,social:1,solut:26,special:10,split:4,spyder:[0,1,2,18,19,20,21,23,24,25,30,32,33,35,37],spyderdockableplugin:35,spyderpluginv2:35,stack:24,standalon:2,standard:33,start:[25,30,35],step:[23,27,30,35,37],stock:33,stop:25,string:17,structur:35,style:4,stylish:37,submit:29,subreddit:24,support:[3,5,10,24],switcher:4,syntax:4,tab:4,tag:24,termin:21,test:[35,37],testpypi:35,theori:37,think:37,third:33,timelin:33,timer:35,toolbar:[11,13,17,35,36],translat:1,trick:26,troubleshoot:[0,23,28],type:35,ubuntu:2,understand:7,updat:[0,2,35],upload:35,usag:8,use:33,variabl:[17,33,37],version:[5,15,25],video:31,viewer:17,virtual:33,visual:37,volatil:33,wai:29,want:1,websit:24,weight:33,welcom:1,what:[29,35],where:[1,27],why:[33,37],widget:[35,36],window:[2,13,36],word:[33,35,37],work:[15,25,32,33,37],workshop:34,write:[1,37],yml:37,your:[1,29,32,35],youtub:24}}) \ No newline at end of file +Search.setIndex({"alltitles": {"1. With commands": [[37, "with-commands"]], "2. From an environment.yml file": [[37, "from-an-environment-yml-file"]], "A first glance at the portfolio": [[33, "a-first-glance-at-the-portfolio"]], "ANOVA test": [[37, "anova-test"]], "About Spyder": [[0, "about-spyder"]], "Actions, Toolbars & Menus": [[36, "actions-toolbars-menus"]], "Activate environment": [[37, "activate-environment"]], "Add a Configuration Page": [[35, "add-a-configuration-page"]], "Add actions to the toolbar": [[35, "add-actions-to-the-toolbar"]], "Additional Options": [[20, "additional-options"]], "Additional help": [[2, "additional-help"]], "Advanced features": [[3, "advanced-features"]], "Advanced functionality": [[17, "advanced-functionality"]], "Advanced options": [[16, "advanced-options"]], "Advanced tricks": [[26, "advanced-tricks"]], "Advanced usage": [[8, "advanced-usage"]], "Age": [[37, "age"]], "Alternative methods": [[2, "alternative-methods"]], "Anaconda base": [[2, "anaconda-base"]], "Anaconda help": [[24, "anaconda-help"]], "AttributeError/ImportError": [[25, "attributeerror-importerror"]], "Automatic formatting": [[4, "automatic-formatting"]], "Basic First Aid": [[23, null]], "Basic Qt Components": [[36, "basic-qt-components"]], "Beyond the main panes": [[32, "beyond-the-main-panes"]], "Breakpoints": [[3, "breakpoints"]], "Build and check the package": [[35, "build-and-check-the-package"]], "Build the test": [[37, "build-the-test"]], "Building our first plugin": [[35, "building-our-first-plugin"]], "Calling for Help": [[24, null]], "Choosing search options": [[6, "choosing-search-options"]], "Class/function selector": [[4, "class-function-selector"]], "Code Analysis": [[16, null], [37, "code-analysis"]], "Code Analysis (share a stylish code!)": [[37, "code-analysis-share-a-stylish-code"]], "Code analysis and completions": [[4, "code-analysis-and-completions"]], "Code cells": [[4, "code-cells"]], "Code completion": [[4, "code-completion"]], "Code navigation": [[4, "code-navigation"]], "Cognitive ability distribution": [[37, "cognitive-ability-distribution"]], "Common Illnesses": [[25, null]], "Common solutions": [[26, "common-solutions"]], "Comparison of expected and realized returns": [[33, "comparison-of-expected-and-realized-returns"]], "Completion/help not working": [[25, "completion-help-not-working"]], "Conda environment": [[2, "conda-environment"]], "Conda-based distributions": [[2, "conda-based-distributions"]], "Configuration defaults": [[35, "configuration-defaults"]], "Configuration page": [[35, "configuration-page"]], "Connect to a local kernel": [[10, "connect-to-a-local-kernel"]], "Connect to a remote kernel": [[10, "connect-to-a-remote-kernel"]], "Connecting an IPython Console": [[20, "connecting-an-ipython-console"]], "Control automatic import": [[7, "control-automatic-import"]], "Create a repository": [[35, "create-a-repository"]], "Create the Pomodoro Toolbar": [[35, "create-the-pomodoro-toolbar"]], "Creating a Project": [[15, "creating-a-project"]], "Customization": [[30, "customization"]], "Daily and monthly timelines": [[33, "daily-and-monthly-timelines"]], "Data Science Stack Exchange": [[24, "data-science-stack-exchange"]], "Data science/SciPy resources:": [[24, "data-science-scipy-resources"]], "DataFrames": [[17, "dataframes"]], "Debugger": [[3, null]], "Debugging and patching": [[23, "debugging-and-patching"]], "Debugging with ipdb": [[3, "debugging-with-ipdb"]], "Development builds": [[2, "development-builds"]], "Dialogs": [[36, "dialogs"]], "Dictionaries": [[17, "dictionaries"]], "Discovering Spyder plugins": [[35, "discovering-spyder-plugins"]], "Download cryptocurrencies data": [[33, "download-cryptocurrencies-data"]], "Download the code": [[33, "download-the-code"], [37, "download-the-code"]], "Download the data": [[33, "download-the-data"]], "Download the datasets": [[33, "download-the-datasets"]], "Downloading and installing": [[2, "downloading-and-installing"]], "Downloading the dataset": [[37, "downloading-the-dataset"]], "Editing features": [[4, "editing-features"]], "Editor": [[4, null], [33, "editor"], [37, "editor"]], "Emergency CPR": [[26, null]], "Enhancing our plugin": [[35, "enhancing-our-plugin"]], "Errors starting the kernel": [[25, "errors-starting-the-kernel"]], "Events": [[36, "events"]], "Expected and realized returns": [[33, "expected-and-realized-returns"]], "Explore the dataset": [[37, "explore-the-dataset"]], "Features": [[35, "features"]], "File associations": [[5, "file-associations"]], "File operations": [[5, "file-operations"]], "File switcher": [[4, "file-switcher"]], "Files": [[5, null]], "Final words": [[33, "final-words"], [35, "final-words"], [37, "final-words"]], "Financial Data Analysis with Spyder": [[33, null]], "Find": [[6, null]], "Find and replace": [[4, "find-and-replace"]], "First Steps": [[27, null]], "First Steps with Spyder": [[30, null]], "First portfolio": [[33, "first-portfolio"]], "Fit plots to window": [[13, "fit-plots-to-window"]], "Formatting the data": [[37, "formatting-the-data"]], "Frequently Asked Questions": [[0, null]], "Further reading": [[33, "further-reading"], [35, "further-reading"], [37, "further-reading"]], "General stock information": [[33, "general-stock-information"]], "Getting help": [[7, "getting-help"]], "Getting help by hovering": [[7, "getting-help-by-hovering"]], "Getting started": [[30, "getting-started"]], "Go to line": [[4, "go-to-line"]], "Help": [[7, null]], "Historical stock data": [[33, "historical-stock-data"]], "History": [[8, null]], "Homework": [[33, "homework"], [35, "homework"], [37, "homework"]], "How can Spyder help me in my scientific research?": [[37, "how-can-spyder-help-me-in-my-scientific-research"]], "How to test our plugin": [[35, "how-to-test-our-plugin"]], "IPython Console": [[10, null], [33, "ipython-console"], [37, "ipython-console"]], "Icons": [[12, "icons"]], "Improving your code quality": [[32, "improving-your-code-quality"]], "Install Guide": [[2, null]], "Installing and updating": [[0, "installing-and-updating"]], "Installing the Line Profiler": [[19, "installing-the-line-profiler"]], "Installing the Notebook": [[20, "installing-the-notebook"]], "Installing the Terminal": [[21, "installing-the-terminal"]], "Installing with Conda": [[2, "installing-with-conda"]], "Interested in translating Spyder?": [[1, "interested-in-translating-spyder"]], "Interface": [[4, "interface"]], "Interpreting the results": [[14, "interpreting-the-results"]], "Intro": [[33, "intro"], [37, "intro"]], "Introduction to financial analysis with Spyder": [[33, "introduction-to-financial-analysis-with-spyder"]], "Introduction to scientific research with Spyder": [[37, "introduction-to-scientific-research-with-spyder"]], "Introspection features": [[4, "introspection-features"]], "Isolating problems": [[23, "isolating-problems"]], "Issue with another dependency": [[25, "issue-with-another-dependency"]], "Join our community": [[1, "join-our-community"]], "Key components": [[4, "key-components"]], "Keyboard shortcuts": [[4, "keyboard-shortcuts"]], "LSP has stopped working": [[25, "lsp-has-stopped-working"]], "Layouts": [[36, "layouts"]], "Learner profile": [[33, "learner-profile"], [37, "learner-profile"]], "Learning Goals": [[35, "learning-goals"]], "Learning goals": [[33, "learning-goals"], [37, "learning-goals"]], "Learning the basics": [[30, "learning-the-basics"]], "Let\u2019s get started": [[35, "let-s-get-started"]], "Linting and code style": [[4, "linting-and-code-style"]], "Linux": [[2, "linux"]], "Lists": [[17, "lists"]], "Looking to contribute your code?": [[1, "looking-to-contribute-your-code"]], "Matplotlib support": [[3, "matplotlib-support"]], "Mean and standard deviation": [[33, "mean-and-standard-deviation"]], "Monte carlo simulation": [[33, "monte-carlo-simulation"]], "Monthly data": [[33, "monthly-data"]], "Mute inline plotting": [[13, "mute-inline-plotting"]], "Numpy arrays": [[17, "numpy-arrays"]], "Object cannot be found": [[25, "object-cannot-be-found"]], "Object missing docstring": [[25, "object-missing-docstring"]], "Object viewers": [[17, "object-viewers"]], "Obtain financial data": [[33, "obtain-financial-data"]], "Official Python help page": [[24, "official-python-help-page"]], "Online Help": [[11, null]], "OpenTeams support": [[24, "openteams-support"]], "Optimal cryptocurrency weights": [[33, "optimal-cryptocurrency-weights"]], "Optimal pharmaceutical stock weights": [[33, "optimal-pharmaceutical-stock-weights"]], "Optimal portfolio weights": [[33, "optimal-portfolio-weights"]], "Optimizing your code": [[32, "optimizing-your-code"]], "Options Menu": [[8, "options-menu"]], "Options menu": [[5, "options-menu"], [10, "options-menu"], [12, "options-menu"], [13, "options-menu"], [16, "options-menu"], [17, "options-menu"]], "Other distributions": [[2, "other-distributions"]], "Other issues": [[25, "other-issues"]], "Outline": [[12, null]], "Panes": [[9, null]], "Plots": [[13, null]], "Plots pane": [[33, "plots-pane"], [37, "plots-pane"]], "Plugin": [[35, "plugin"]], "Plugin Development with Spyder": [[35, null]], "Plugin Problems": [[25, "plugin-problems"]], "Plugin does not work at all": [[25, "plugin-does-not-work-at-all"]], "Plugins": [[18, null]], "PomodoroTimerToolbar": [[35, "pomodorotimertoolbar"]], "Preparation work": [[33, "preparation-work"], [37, "preparation-work"]], "Prepare portfolio data": [[33, "prepare-portfolio-data"]], "Prerequisites": [[33, "prerequisites"], [35, "prerequisites"], [37, "prerequisites"]], "Profiler": [[14, null]], "Profiler plugins": [[14, "profiler-plugins"]], "Project Jupyter": [[24, "project-jupyter"]], "Projects": [[15, null]], "Propagate configuration changes": [[35, "propagate-configuration-changes"]], "Publishing your plugin": [[35, "publishing-your-plugin"]], "PyPI and TestPyPI": [[35, "pypi-and-testpypi"]], "Python documentation": [[24, "python-documentation"]], "Python resources": [[24, "python-resources"]], "Python subreddits": [[24, "python-subreddits"]], "Qt Fundamentals": [[36, null]], "Recommended troubleshooting steps": [[23, "recommended-troubleshooting-steps"]], "Register the toolbar": [[35, "register-the-toolbar"]], "Registering preferences": [[35, "registering-preferences"]], "Reinstalling Spyder": [[23, "reinstalling-spyder"]], "Relate variables": [[37, "relate-variables"]], "Related panes": [[3, "related-panes"], [4, "related-panes"], [5, "related-panes"], [6, "related-panes"], [7, "related-panes"], [8, "related-panes"], [10, "related-panes"], [11, "related-panes"], [12, "related-panes"], [13, "related-panes"], [14, "related-panes"], [15, "related-panes"], [16, "related-panes"], [17, "related-panes"]], "Religion seriosity": [[37, "religion-seriosity"]], "Reload changed modules": [[10, "reload-changed-modules"]], "Report and share": [[37, "report-and-share"]], "Return, volatility and Sharpe ratio": [[33, "return-volatility-and-sharpe-ratio"]], "Returns and volatility": [[33, "returns-and-volatility"]], "Returns, volatility and Sharpe ratio": [[33, "returns-volatility-and-sharpe-ratio"]], "Review the changes": [[35, "review-the-changes"]], "Run ANOVA": [[37, "run-anova"]], "Run cell": [[4, "run-cell"]], "Run configuration": [[4, "run-configuration"]], "Run file": [[4, "run-file"]], "Run line/selection": [[4, "run-line-selection"]], "Running Spyder": [[0, "running-spyder"]], "Running code": [[4, "running-code"]], "Running from a standalone install": [[2, "running-from-a-standalone-install"]], "Running the Profiler": [[14, "running-the-profiler"]], "Running with Anaconda": [[2, "running-with-anaconda"]], "Running with Conda": [[2, "running-with-conda"]], "SciPy.org website": [[24, "scipy-org-website"]], "Scientific Computing and Visualization with Spyder": [[37, null]], "Second portfolio": [[33, "second-portfolio"]], "Set up Conda environment": [[33, "set-up-conda-environment"]], "Set up a development environment": [[35, "set-up-a-development-environment"]], "Setting up the Conda environment": [[37, "setting-up-the-conda-environment"]], "Setting up the virtual environment in Spyder": [[33, "setting-up-the-virtual-environment-in-spyder"]], "Setting up the working directory": [[37, "setting-up-the-working-directory"]], "Sharpe ratio": [[33, "sharpe-ratio"]], "Show plot outline": [[13, "show-plot-outline"]], "Signals & Slots": [[36, "signals-slots"]], "Special consoles": [[10, "special-consoles"]], "Split panels": [[4, "split-panels"]], "Spyder Gitter": [[24, "spyder-gitter"]], "Spyder Google Group": [[24, "spyder-google-group"]], "Spyder Line Profiler": [[19, null]], "Spyder Notebook": [[20, null]], "Spyder Terminal": [[21, null]], "Spyder and Spyder-Kernels version compatibility": [[25, "id1"]], "Spyder bug/dependency issue": [[25, "spyder-bug-dependency-issue"]], "Spyder for developers": [[35, "spyder-for-developers"]], "Spyder website": [[24, "spyder-website"]], "Spyder-Kernels not installed/incompatible": [[25, "spyder-kernels-not-installed-incompatible"]], "Spyder-related platforms": [[24, "spyder-related-platforms"]], "SpyderDockablePlugin": [[35, "spyderdockableplugin"], [35, null]], "SpyderPluginV2": [[35, "spyderpluginv2"], [35, null]], "Spyder\u2019s FAQ section": [[24, "spyder-s-faq-section"]], "Spyder\u2019s YouTube channel": [[24, "spyder-s-youtube-channel"]], "Stack Overflow tag": [[24, "stack-overflow-tag"]], "Standalone installers": [[2, "standalone-installers"]], "Steps": [[35, "steps"]], "Strings": [[17, "strings"]], "Submit a Report": [[29, null]], "Supported features": [[10, "supported-features"]], "Syntax highlighting": [[4, "syntax-highlighting"]], "Tabs": [[4, "tabs"]], "Terminal Preferences": [[21, "terminal-preferences"]], "The basic steps of the scientific method": [[37, "the-basic-steps-of-the-scientific-method"]], "The container": [[35, "the-container"]], "The dataset": [[37, "the-dataset"]], "The plugin structure": [[35, "the-plugin-structure"]], "Think of a theory and write a hypothesis": [[37, "think-of-a-theory-and-write-a-hypothesis"]], "Third portfolio": [[33, "third-portfolio"]], "Timer controls": [[35, "timer-controls"]], "Timer updates": [[35, "timer-updates"]], "Toolbar buttons": [[17, "toolbar-buttons"]], "Toolbar items": [[11, "toolbar-items"]], "Toolbar options": [[13, "toolbar-options"]], "Tour": [[22, null]], "Troubleshooting": [[0, "troubleshooting"], [28, null]], "Try Spyder online": [[2, "try-spyder-online"]], "Tutorials": [[31, null]], "Types of plugins we can develop in Spyder": [[35, "types-of-plugins-we-can-develop-in-spyder"]], "Ubuntu/Debian": [[2, "ubuntu-debian"]], "Understanding help modes": [[7, "understanding-help-modes"]], "Updating a standalone install": [[2, "updating-a-standalone-install"]], "Updating with Anaconda": [[2, "updating-with-anaconda"]], "Updating with Conda": [[2, "updating-with-conda"]], "Upload to PyPI": [[35, "upload-to-pypi"]], "Using Spyder": [[0, "using-spyder"]], "Using external kernels": [[10, "using-external-kernels"]], "Using pip": [[2, "using-pip"]], "Using the Find pane": [[6, "using-the-find-pane"]], "Using the History pane": [[8, "using-the-history-pane"]], "Using the Line Profiler": [[19, "using-the-line-profiler"]], "Using the Notebook": [[20, "using-the-notebook"]], "Using the Online Help": [[11, "using-the-online-help"]], "Using the Projects Pane": [[15, "using-the-projects-pane"]], "Using the Terminal": [[21, "using-the-terminal"]], "Using the code analyzer": [[16, "using-the-code-analyzer"]], "Using the monte_carlo_sharpe function": [[33, "using-the-monte-carlo-sharpe-function"]], "Variable Explorer": [[17, null], [33, "variable-explorer"], [37, "variable-explorer"]], "Version control support": [[5, "version-control-support"]], "Want to be part of our social media?": [[1, "want-to-be-part-of-our-social-media"]], "Want to help writing docs?": [[1, "want-to-help-writing-docs"]], "Ways to submit an issue": [[29, "ways-to-submit-an-issue"]], "Welcome to Spyder\u2019s Documentation": [[1, null]], "What to include in your report": [[29, "what-to-include-in-your-report"]], "What will we do?": [[35, "what-will-we-do"]], "Where to go from here": [[27, "where-to-go-from-here"]], "Where to go now?": [[1, "where-to-go-now"]], "Why do scientific research with Python?": [[37, "why-do-scientific-research-with-python"]], "Why should I use an IDE?": [[33, "why-should-i-use-an-ide"]], "Why use Python for financial analysis?": [[33, "why-use-python-for-financial-analysis"]], "Widgets": [[35, "widgets"], [36, "widgets"]], "Windows": [[2, "install-windows"], [36, "windows"]], "With commands": [[33, "with-commands"]], "Working with Spyder": [[32, null]], "Working with version control": [[15, "working-with-version-control"]], "Workshops": [[34, null]], "macOS": [[2, "macos"]], "monte_carlo_sharpe function explained": [[33, "monte-carlo-sharpe-function-explained"]]}, "docnames": ["faq", "index", "installation", "panes/debugging", "panes/editor", "panes/fileexplorer", "panes/findinfiles", "panes/help", "panes/historylog", "panes/index", "panes/ipythonconsole", "panes/onlinehelp", "panes/outline", "panes/plots", "panes/profiler", "panes/projects", "panes/pylint", "panes/variableexplorer", "plugins/index", "plugins/lineprofiler", "plugins/notebook", "plugins/terminal", "quickstart", "troubleshooting/basic-first-aid", "troubleshooting/call-for-help", "troubleshooting/common-illnesses", "troubleshooting/emergency-cpr", "troubleshooting/first-steps", "troubleshooting/index", "troubleshooting/submit-a-report", "videos/first-steps-with-spyder", "videos/index", "videos/working-with-spyder", "workshops/financial", "workshops/index", "workshops/plugin-development", "workshops/qt_fundamentals", "workshops/scientific-computing"], "envversion": {"sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["faq.rst", "index.rst", "installation.rst", "panes/debugging.rst", "panes/editor.rst", "panes/fileexplorer.rst", "panes/findinfiles.rst", "panes/help.rst", "panes/historylog.rst", "panes/index.rst", "panes/ipythonconsole.rst", "panes/onlinehelp.rst", "panes/outline.rst", "panes/plots.rst", "panes/profiler.rst", "panes/projects.rst", "panes/pylint.rst", "panes/variableexplorer.rst", "plugins/index.rst", "plugins/lineprofiler.rst", "plugins/notebook.rst", "plugins/terminal.rst", "quickstart.rst", "troubleshooting/basic-first-aid.rst", "troubleshooting/call-for-help.rst", "troubleshooting/common-illnesses.rst", "troubleshooting/emergency-cpr.rst", "troubleshooting/first-steps.rst", "troubleshooting/index.rst", "troubleshooting/submit-a-report.rst", "videos/first-steps-with-spyder.rst", "videos/index.rst", "videos/working-with-spyder.rst", "workshops/financial.rst", "workshops/index.rst", "workshops/plugin-development.rst", "workshops/qt_fundamentals.rst", "workshops/scientific-computing.rst"], "indexentries": {"pep 8": [[4, "index-0", false]], "python enhancement proposals": [[4, "index-0", false]]}, "objects": {}, "objnames": {}, "objtypes": {}, "terms": {"": [0, 2, 3, 4, 5, 6, 7, 10, 11, 13, 14, 15, 16, 17, 20, 21, 22, 23, 25, 26, 27, 29, 30, 32, 33, 34, 36, 37], "0": [0, 2, 14, 25, 33, 35, 37], "00": [33, 35], "000": 33, "000000": 33, "006954": 33, "008778": 33, "009126": 33, "01": [14, 33], "018784": 33, "02": 33, "020698": 33, "023033": 33, "023134": 33, "029931": 33, "02d": 35, "03": [33, 37], "04": 0, "042060": 33, "044063": 33, "05": 37, "053174": 33, "0583": 33, "058395": 33, "06": 33, "061057": 33, "062207": 33, "063068": 33, "0809": 33, "081239": 33, "082308": 33, "1": [0, 25, 30, 33, 35], "10": [0, 25, 30, 32, 33, 37], "100": [0, 35, 37], "1000": [8, 33, 35], "11": [0, 37], "11142": 37, "12": [33, 37], "1234": 10, "127": 0, "129": 37, "13": [0, 32], "14": 37, "144": 32, "1454": 33, "145416": 33, "15": [33, 35], "155103": 33, "16": [0, 33], "1637": 33, "171": 33, "18": 37, "1949": 33, "1997": 33, "199700": 33, "2": [0, 4, 25, 30, 33, 35], "20": [0, 30, 32, 33], "200": 0, "2012": [33, 37], "2013": 33, "2014": 33, "2015": 33, "2016": [33, 37], "2017": 33, "2018": 33, "2019": 33, "2020": [0, 33], "2021": 33, "2061518063427656": 33, "2062": 33, "22": [10, 35], "2370": 33, "23704031354688784": 33, "24": [29, 33], "25": [35, 37], "252": 33, "26": [32, 37], "265": 33, "26775": 37, "2859": 33, "2859066023606343": 33, "2f": 37, "3": [0, 2, 4, 14, 25, 30, 32, 33, 35], "30": 33, "300": 33, "31": [33, 37], "32": 37, "324053": 33, "3290": 37, "338": 32, "34": 32, "3600": 33, "371": 37, "39": 32, "3d": [35, 36], "3f": 33, "4": [0, 2, 17, 25, 30, 32, 33, 35, 36, 37], "40": 33, "408009": 33, "4181": 33, "479": 37, "482": 32, "4940": 33, "4f": 33, "5": [0, 2, 25, 33, 35, 37], "50": 37, "5372": 37, "5813": 37, "6": [25, 33, 35, 37], "60": 35, "6203": 33, "6241": 37, "626": 37, "6275": 37, "63": 32, "65": 37, "68": 37, "6972": 33, "7": [32, 33], "7307": 37, "7587": 33, "8": [0, 4, 25, 37], "8176": 33, "86": 14, "87": 14, "89547": 37, "9": [25, 37], "95": 37, "A": [0, 4, 10, 20, 23, 29, 35, 36, 37], "And": [2, 33, 35, 37], "As": [4, 10, 23, 27, 32, 33, 35, 36, 37], "At": [19, 20, 21, 35, 37], "But": [33, 37], "By": [2, 3, 5, 14, 30, 32, 33, 35, 37], "For": [0, 1, 2, 3, 4, 10, 13, 14, 16, 17, 19, 20, 23, 25, 26, 30, 32, 33, 35, 37], "If": [0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 13, 14, 16, 17, 19, 20, 21, 23, 24, 25, 26, 27, 29, 30, 32, 33, 35, 36, 37], "In": [0, 1, 2, 4, 10, 15, 17, 21, 23, 25, 26, 29, 30, 32, 33, 35, 36, 37], "It": [0, 1, 2, 4, 13, 15, 17, 21, 24, 25, 30, 33, 35, 37], "Its": [33, 35], "No": 37, "Not": [33, 35], "Of": 33, "On": [2, 24, 30, 32, 33, 35, 37], "Or": [2, 16, 30, 33, 37], "That": [35, 36], "The": [0, 1, 2, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 24, 26, 29, 30, 32, 33, 34, 36], "Then": [0, 2, 10, 23, 26, 33, 35, 36, 37], "There": [3, 14, 17, 25, 27, 29, 32, 35, 36, 37], "These": [1, 2, 4, 12, 17, 23, 30, 33, 35, 36, 37], "To": [0, 2, 3, 4, 5, 6, 10, 11, 12, 14, 15, 16, 17, 20, 23, 25, 26, 27, 30, 32, 33, 35, 36, 37], "With": [0, 2, 3, 8, 10, 15, 30, 32, 35], "_": 35, "__file__": 35, "__init__": [16, 35, 36], "__main__": 14, "_interv": 35, "_opt_w": 33, "_ret": 33, "aa": [4, 6, 11], "aapl": 33, "abil": [29, 35], "abl": [2, 10, 17, 19, 20, 21, 23, 24, 25, 27, 32, 33, 35, 37], "about": [1, 2, 10, 23, 24, 29, 30, 32, 33, 35, 36, 37], "abov": [0, 2, 4, 11, 19, 23, 26, 29, 30, 33, 35, 37], "absolut": [0, 5, 12, 32], "abstract": [35, 37], "access": [3, 4, 5, 6, 7, 30, 33, 35, 36], "accident": 30, "accompani": 33, "accomplish": 32, "accord": [5, 35], "accordingli": 13, "account": [29, 35, 37], "accumul": 33, "accur": 33, "achiev": [33, 35, 37], "across": [17, 32], "action": [4, 17, 33], "activ": [0, 2, 3, 4, 5, 10, 13, 23, 24, 25, 32, 33, 35], "actual": [16, 23, 27, 29, 30, 33, 35], "actual_weight": 33, "ad": [2, 3, 4, 12, 15, 16, 17, 19, 32, 35], "adapt": 35, "add": [0, 2, 3, 4, 5, 17, 19, 25, 26, 32, 33, 34, 36, 37], "add_application_toolbar": 35, "add_item_to_menu": 35, "add_item_to_toolbar": 35, "add_status_widget": 35, "addit": [0, 1, 4, 10, 14, 15, 17, 18, 32, 33, 35, 36, 37], "addition": [3, 5, 13, 17, 30, 32], "addon": 35, "address": [10, 25, 36], "addstretch": 35, "addwidget": 35, "adequ": 33, "adjust": [3, 16, 17, 35], "administr": 10, "advanc": [0, 1, 4, 6, 9, 28, 32, 37], "advantag": [20, 32, 33, 35, 37], "advertis": 35, "advis": [2, 35], "affect": [4, 10, 17, 30, 35, 37], "after": [2, 4, 7, 10, 14, 19, 23, 25, 26, 30, 32, 33, 35, 37], "afterward": [23, 33], "again": [8, 20, 23, 27, 32, 35, 37], "against": 17, "aid": [0, 25, 26, 27, 28, 35], "aim": [24, 33], "alert": 37, "algorithm": [33, 37], "align": 37, "all": [0, 2, 3, 4, 6, 8, 10, 12, 13, 14, 15, 16, 17, 19, 20, 23, 26, 30, 32, 33, 35, 37], "allow": [0, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 16, 17, 20, 21, 30, 32, 33, 35, 36, 37], "almost": [23, 33], "alon": 27, "along": [2, 3, 8, 23, 24, 29, 30], "alongsid": 20, "alpha": 37, "alphabet": [4, 12], "alreadi": [0, 2, 10, 17, 24, 25, 26, 27, 33, 35, 37], "also": [2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 20, 21, 26, 27, 29, 30, 32, 33, 35, 36, 37], "alt": [4, 35], "altern": [36, 37], "although": [0, 33, 35, 37], "alwai": [2, 3, 30, 32, 33, 37], "am": [32, 35], "amazon": 33, "among": [33, 35, 36, 37], "amount": [2, 33, 37], "amzn": 33, "an": [0, 2, 3, 4, 5, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 22, 23, 24, 25, 26, 27, 28, 30, 32, 35, 36], "anaconda": [0, 16, 19, 20, 21, 23, 25, 26, 27, 29, 30, 32, 33, 35, 37], "analys": [16, 32], "analysi": [1, 2, 7, 9, 14, 25, 32, 34, 35], "analyst": [1, 33, 37], "analyz": [9, 32, 33, 37], "ani": [0, 1, 2, 3, 4, 7, 8, 10, 11, 14, 15, 17, 19, 20, 21, 23, 25, 26, 29, 30, 32, 33, 35, 37], "annex": 35, "annual": 33, "anoth": [0, 6, 13, 23, 32, 33, 35, 37], "anova": 34, "answer": [0, 24, 37], "antiviru": 26, "anymor": 32, "anyon": [0, 1, 33, 35], "anyth": 29, "anywai": [0, 2, 29], "anywher": [16, 20, 30, 32, 35], "apach": 35, "api": [33, 35], "app": [10, 26, 36], "appdata": 23, "appear": [0, 2, 4, 13, 14, 17, 25, 27, 30, 32, 33, 35, 37], "append": 37, "appl": 33, "appli": [0, 30, 33, 35, 37], "applic": [0, 1, 2, 4, 5, 24, 26, 29, 30, 32, 33, 35, 36, 37], "applicationtoolbar": 35, "appreci": [33, 37], "approach": [0, 23, 25, 33], "appropri": [0, 2, 17, 32, 35, 37], "approxim": 33, "apt": 2, "ar": [0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 19, 23, 24, 25, 26, 29, 30, 32, 33, 35, 36, 37], "arbitrari": 17, "arch": 2, "area": [4, 13, 20, 21, 35], "aren": [0, 23, 24, 27], "argument": [4, 32, 33, 35, 37], "aris": 35, "around": [1, 4, 23, 25, 32, 33, 37], "arrai": [2, 30, 32, 33, 37], "arrang": 36, "arriv": 35, "arrow": [3, 4, 5, 11, 13, 14, 16, 32], "artifact": 35, "artifici": 33, "ascend": 33, "asid": [0, 8, 24, 35], "ask": [1, 2, 24, 37], "aspect": 37, "assembl": 33, "asset": 33, "assign": [30, 32, 33, 35], "assist": [2, 23, 24], "associ": [7, 9, 13, 15, 17, 20, 32, 35], "assum": 33, "assumpt": 37, "asterisk": 37, "astra": 33, "astro": 37, "atom": 25, "attent": 35, "attribut": [5, 12, 33, 35, 37], "auto": 29, "autocomplet": [3, 4, 27], "autoformat": 4, "automat": [0, 2, 3, 5, 6, 9, 10, 12, 14, 15, 17, 29, 30, 32, 33, 36, 37], "autopep8": 4, "av": 35, "avail": [0, 2, 3, 4, 7, 15, 16, 17, 19, 20, 21, 23, 30, 32, 33, 35, 36, 37], "averag": [19, 33, 37], "avoid": [0, 2, 3, 23, 33, 36, 37], "awar": 35, "ax": 37, "axi": [33, 37], "axvlin": 37, "azn": 33, "b": [3, 23, 30, 33, 37], "back": [3, 11, 13, 16, 26, 29, 33, 35], "backend": [3, 10, 13, 23], "background": [4, 11, 17], "backtick": 29, "backward": 33, "bad": [16, 32, 33, 37], "balanc": 33, "bar": [0, 4, 14, 16, 25, 30, 32, 33, 35, 36, 37], "bare": [23, 33], "barplot": 37, "base": [0, 1, 10, 16, 17, 32, 33, 35, 36, 37], "base_curr": 33, "baselin": 0, "basetimerstatu": 35, "bash": 21, "basi": 36, "basic": [0, 1, 2, 4, 5, 7, 15, 24, 25, 26, 27, 28, 31, 33, 34, 35], "bat": [2, 26], "batch": 26, "bdist_wheel": 35, "beauti": [1, 37], "becaus": [30, 32, 33, 35, 37], "becom": [1, 36], "been": [0, 7, 10, 19, 29, 33, 37], "befor": [0, 2, 3, 23, 24, 27, 29, 30, 32, 33, 35, 36, 37], "begin": [29, 32, 33, 35], "beginn": 24, "behav": [24, 37], "behavior": [4, 29, 33, 35, 36], "being": [0, 4, 10, 17, 19, 25, 33, 35], "bell": 37, "below": [0, 2, 4, 29, 33, 35], "benchmark": 14, "benefit": 0, "best": [0, 16, 19, 20, 21, 23, 29, 33, 35, 37], "bet": 33, "better": [0, 23, 24, 27, 33, 35, 37], "between": [4, 14, 30, 32, 33, 35, 37], "beyond": [0, 25, 30, 31, 35, 37], "bia": 37, "big": [0, 32], "biggest": 33, "bin": [2, 37], "binder": [0, 2, 33, 37], "bit": 33, "bitcoin": 33, "bjerreka": 37, "bjerrek\u00e6r": 37, "black": 4, "block": [4, 16, 23, 29, 32, 35, 36, 37], "blue": 33, "bluetooth": [35, 36], "boilerpl": 35, "book": [33, 37], "boolean": [17, 35, 37], "border": 37, "bot": 35, "both": [2, 7, 13, 14, 16, 25, 29, 30, 32, 33, 37], "bottleneck": [14, 32], "bottom": [0, 20, 21, 25, 30, 33, 37], "bought": 33, "bound": 33, "boundari": 37, "box": [0, 2, 4, 6, 10, 14, 16, 17, 30, 32, 36, 37], "bracket": 32, "break": [0, 14, 33, 35], "breakpoint": [4, 9], "brew": 2, "brief": 24, "briefli": 30, "bring": 29, "broad": [6, 33], "broadli": 37, "broken": [2, 14], "brought": 33, "brows": [4, 5, 10, 11, 14, 15, 16, 17, 30, 32, 33, 37], "browser": [0, 2, 5, 11, 32, 35], "bsd": 35, "btc": 33, "btc_hist": 33, "buffer": 21, "buffett": 33, "bug": [0, 1, 2, 4, 16, 23, 24, 26, 27, 32, 37], "build": [33, 34, 36], "built": [2, 3, 4, 5, 8, 10, 11, 17, 25, 32, 33, 35, 36, 37], "builtin": [3, 17], "bump": 35, "bundl": [0, 2], "busi": 33, "button": [0, 4, 5, 6, 9, 11, 12, 13, 14, 16, 19, 20, 21, 29, 30, 32, 33, 35, 36, 37], "c": [0, 2, 8, 10, 12, 19, 20, 21, 23, 25, 26, 33, 35, 37], "c0326": 32, "ca_item": 37, "ca_test": 37, "calc": 32, "calcul": [20, 33, 35, 37], "call": [2, 3, 10, 14, 23, 27, 28, 32, 33, 35, 37], "callabl": [14, 36], "calltip": [0, 4, 10, 25], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 23, 24, 25, 26, 27, 29, 30, 32, 33, 34, 36], "cancel": [11, 14, 16, 35], "cannot": [35, 37], "capabl": [1, 2, 10, 33, 37], "capit": [6, 35], "captur": 35, "care": [2, 23, 33], "carefulli": 26, "carlo": 24, "carpentri": 35, "case": [2, 4, 6, 11, 23, 25, 26, 29, 30, 32, 33, 35, 36, 37], "cask": 2, "cat": 37, "categor": 37, "categori": [27, 37], "catplot": 37, "caus": [23, 24, 25], "cautiou": 33, "cb": 33, "cd": [26, 35, 37], "cell": [0, 12, 17, 20, 36, 37], "center": 37, "central": 24, "certain": [6, 8, 16, 32, 37], "certainli": 23, "chanc": [2, 23, 27, 29, 37], "chang": [0, 1, 2, 3, 4, 5, 6, 9, 11, 13, 14, 17, 30, 32, 33, 36, 37], "channel": [0, 1, 2, 35], "channel_prior": 2, "charact": 17, "charg": 35, "chart": [33, 35, 36, 37], "chat": [2, 24], "chatroom": 2, "check": [0, 1, 2, 3, 4, 10, 16, 23, 24, 25, 26, 27, 29, 30, 32, 33, 37], "check_compat": 35, "checkbox": 33, "checkmark": 35, "children": 35, "choic": [4, 35, 37], "choos": [9, 15, 17, 30, 33, 35, 36, 37], "chosen": 37, "chunk": [33, 37], "circl": 35, "circular": 11, "cirillo": 35, "cla": 4, "class": [7, 12, 16, 17, 25, 32, 33, 35, 36, 37], "classic": 33, "classifi": 35, "classmethod": 4, "clean": [0, 10, 23, 27, 35, 37], "cleaner": 32, "clear": [0, 3, 4, 6, 8, 10, 13, 14, 21, 27], "clearli": 33, "click": [0, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 20, 21, 25, 26, 27, 29, 30, 32, 33, 35, 37], "clipboard": [5, 13, 20, 32, 33, 37], "clone": 35, "close": [4, 8, 20, 23, 29, 30, 33, 35, 37], "close_data_1": 33, "close_data_2": 33, "cloud": [33, 37], "cmap": 33, "cmd": [3, 4, 10, 12, 30, 33], "code": [0, 2, 3, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 19, 20, 23, 24, 25, 27, 29, 30, 31, 35, 36], "codebas": 35, "codecel": 4, "cognitive_scor": 37, "coin": 33, "coin_search": 33, "cokkiecutt": 35, "col": 37, "colab": [33, 37], "collaps": [5, 6, 14, 16, 32], "collect": 37, "color": [4, 17, 19, 33, 35, 36, 37], "color_palett": 37, "colorbar": 33, "colormap": 17, "column": [5, 14, 17, 19, 30, 32, 33, 36, 37], "com": 35, "combin": [1, 37], "come": [0, 2, 4, 23, 33, 35, 37], "comma": 16, "command": [0, 2, 3, 4, 8, 10, 15, 19, 20, 21, 23, 25, 26, 29, 30, 32, 35], "comment": [12, 16, 32], "commerci": 0, "commit": [5, 15], "common": [0, 2, 4, 5, 10, 27, 28, 32, 36], "commonli": [3, 33, 36], "commun": [0, 2, 24, 36, 37], "compani": [0, 33], "companionship": 37, "compar": [14, 32, 33, 37], "comparison": [14, 32], "compat": [0, 2, 10, 37], "compens": 33, "compil": 35, "complet": [0, 1, 3, 9, 10, 15, 28, 29, 30, 33, 35, 36, 37], "complex": [3, 30, 33, 35, 37], "compon": [9, 33, 34, 35, 37], "compos": [33, 37], "composit": 33, "comprehens": [1, 2, 33, 37], "comput": [0, 2, 5, 20, 30, 32, 33, 34, 35, 36], "concept": [33, 35], "concern": 37, "conclus": 37, "concret": 37, "conda": [0, 19, 20, 21, 23, 24, 25, 29, 30, 35], "condit": 3, "conf": 35, "conf_default": 35, "conf_sect": 35, "conf_vers": 35, "conf_widget_class": 35, "config": [2, 23, 35], "configur": [0, 2, 3, 7, 10, 14, 16, 30, 32, 34], "confirm": [0, 33, 37], "conflict": [2, 33, 37], "confpag": 35, "connect": [0, 1, 2, 7, 18, 33, 35, 36], "connect_info": 10, "consid": [33, 35], "consider": [35, 37], "consist": [4, 26, 29, 33, 35, 36, 37], "consol": [0, 3, 4, 7, 8, 9, 13, 14, 17, 18, 21, 23, 25, 29, 30, 32, 35], "consolid": 35, "constant": [12, 33, 35], "constitut": 37, "constraint": 33, "construct": [33, 37], "constructor": [4, 35], "consult": [2, 4, 24, 27, 33], "contact": 35, "contain": [0, 16, 24, 29, 32, 33, 36, 37], "container_class": 35, "content": [3, 4, 5, 6, 10, 11, 17, 19, 26, 30, 32, 35], "context": [4, 5, 8, 15, 17, 20, 33, 37], "continu": [25, 30, 32], "contract": 17, "contrast": 33, "contribut": [2, 35, 37], "control": [2, 3, 4, 9, 21, 25, 32, 34, 36], "conveni": [10, 33, 35, 37], "convent": [4, 37], "convert": 35, "cookbook": 10, "cookicutt": 35, "cookiecutt": 35, "cool": 33, "copi": [0, 2, 5, 8, 10, 13, 16, 17, 20, 21, 23, 26, 29, 30, 32, 33, 35, 37], "cordoba": 24, "core": [0, 4, 24, 30, 32, 35, 36], "corner": [7, 21, 33, 35, 37], "corr": 33, "correct": [1, 32, 33, 37], "correctli": [0, 37], "correl": [33, 37], "correspond": [4, 5, 10, 11, 12, 16, 25, 32, 33, 35, 36, 37], "could": [33, 35, 36, 37], "couldn": 27, "count": [4, 14, 35, 37], "countdown": 35, "counter": 35, "coupl": [23, 32, 33], "cours": [23, 33, 37], "cov": 33, "covari": 33, "cover": 1, "coverag": 35, "cpr": [27, 28], "cpu": 0, "crash": 27, "creat": [0, 2, 4, 5, 9, 10, 12, 13, 17, 20, 21, 23, 25, 26, 33, 34, 36, 37], "create_act": 35, "create_menu": 35, "create_spinbox": 35, "create_toolbutton": 35, "creation": 35, "criteria": 17, "critic": [14, 37], "crowdin": 1, "crucial": 37, "crypto": 33, "crypto_hist": 33, "crypto_list": 33, "csv": [32, 33, 37], "ctrl": [3, 4, 7, 10, 11, 12, 30, 33, 35], "cumprod": 33, "currenc": 33, "current": [0, 1, 2, 3, 4, 8, 10, 12, 13, 14, 15, 17, 21, 25, 26, 32, 33, 35, 37], "current_year": 33, "cursor": [0, 4, 12, 21, 32], "curv": 37, "custom": [2, 3, 4, 5, 12, 13, 16, 21, 23, 31, 32, 36], "customiz": 16, "cycl": [13, 35], "cython": [2, 10, 25, 33, 37], "d": [11, 14, 15, 16, 32, 37], "d_": 37, "d_age": 37, "d_religion_serios": 37, "daemon": 10, "dai": [24, 33], "dark": 30, "dash": 37, "data": [1, 2, 4, 10, 14, 17, 28, 32, 34, 35, 36], "data_1": 33, "data_2": 33, "datafram": [2, 4, 33, 37], "dataset": 34, "datatyp": 17, "date": [0, 1, 2, 5, 8, 23, 25, 32, 33, 37], "datetim": 32, "deactiv": [3, 13, 17], "deadlin": 35, "deal": 33, "deb": 2, "debug": [1, 4, 9, 26, 28, 37], "debugg": [9, 10, 17, 20], "decad": 33, "decim": [17, 33], "declar": [4, 35], "declin": 33, "decor": [4, 19, 35], "decreas": [33, 35], "dedic": [0, 2, 4, 33, 35, 37], "deep": [0, 1, 37], "deeper": 17, "def": [33, 35], "default": [0, 2, 3, 4, 5, 7, 8, 10, 13, 14, 16, 23, 25, 30, 32, 33], "defin": [3, 4, 6, 30, 32, 33, 35, 37], "definit": [4, 12, 35], "degre": 37, "delet": [5, 8, 23, 30, 33, 35, 37], "delimit": 33, "delta": 14, "demo": 30, "demograph": 37, "demonstr": 30, "denomin": 33, "denot": 36, "densiti": 37, "depend": [0, 2, 23, 29, 33, 35, 37], "deprec": 10, "depth": [1, 35], "deriv": 35, "describ": [0, 2, 4, 25, 26, 29, 33, 37], "descript": [1, 2, 4, 16, 27, 29, 33, 35, 37], "deserv": 35, "design": [1, 33, 35, 36, 37], "desir": [4, 10, 16, 17, 33, 35, 37], "desktop": [35, 36], "despit": 33, "detail": [0, 1, 2, 10, 16, 23, 27, 29, 33, 35, 36], "detect": [16, 32, 37], "determin": [4, 14, 32], "detract": 37, "dev": [0, 2, 35], "dev0": 35, "develop": [0, 1, 24, 30, 33, 34, 36, 37], "deviat": [4, 37], "df": 37, "dfd": 37, "dfn": 37, "diagnos": [23, 29], "diagram": 37, "dialog": [0, 2, 4, 10, 14, 16, 17, 25, 26, 27, 29, 30, 35], "dictionari": [33, 35], "did": [29, 33, 35, 37], "diff": [14, 32, 35], "differ": [1, 3, 4, 5, 17, 23, 26, 30, 32, 33, 35, 36, 37], "differenti": 37, "difficult": [29, 37], "difficulti": [2, 29], "dimens": 17, "dimension": 17, "diminish": 33, "dir": 10, "direct": [2, 16, 35], "directli": [5, 7, 10, 11, 16, 17, 24, 26, 29, 30, 32, 33, 37], "directori": [3, 4, 5, 6, 8, 10, 15, 16, 21, 23, 25, 26, 30, 32, 33, 35], "disabl": [4, 7, 12, 13, 16, 26, 32, 35], "disappear": 26, "discard": 37, "discourag": 10, "discov": [30, 32, 37], "discuss": [2, 24, 33], "disk": [2, 14, 26, 33], "dismiss": 36, "dispers": 37, "displai": [0, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 17, 19, 20, 25, 29, 32, 33, 35, 36, 37], "display_tim": 35, "disproven": 37, "disrupt": 10, "dist": 35, "distinct": [4, 33], "distinguish": 37, "distribut": [0, 5, 15, 23, 24, 27, 33, 35], "distro": [0, 2], "divid": [4, 30, 33], "do": [0, 2, 3, 8, 20, 23, 24, 25, 26, 29, 30, 32, 33, 34, 36], "doabl": 23, "doc": [4, 11, 22, 23, 24, 32, 35], "dock": [2, 35], "dockabl": [35, 36], "docstr": [0, 7], "document": [2, 4, 7, 10, 11, 13, 16, 25, 30, 32, 33, 35, 36, 37], "doe": [0, 2, 16, 26, 29, 33, 35, 37], "doesn": [0, 1, 4, 16, 23, 25, 26, 32, 33], "dog": 37, "dog_or_cat": 37, "dog_or_cat_col_nam": 37, "dog_or_cat_pivot": 37, "dog_or_cat_sampl": 37, "doi": 37, "dollar": 33, "don": [0, 1, 17, 20, 23, 25, 30, 32, 33, 35, 37], "done": [23, 33, 35, 37], "dot": [33, 37], "doubl": [2, 4, 5, 10, 14, 17, 26, 29, 30, 32, 33, 37], "doubt": [35, 37], "down": [3, 4, 11, 14, 23, 30, 32, 33], "download": [0, 30, 32, 35], "downward": 37, "dpi": 33, "drag": [2, 4, 30], "draw": [33, 37], "drawn": 33, "drive": 0, "drop": [4, 11, 30, 33, 37], "dropdown": [0, 4, 6, 14, 16, 30, 32, 33, 37], "dropna": [33, 37], "dtype": [33, 37], "dual": 0, "due": [2, 23, 25, 33, 35, 37], "duplic": [17, 29, 36], "durat": 35, "dure": [13, 33, 35], "dynam": [7, 11, 25], "e": [0, 2, 3, 4, 10, 14, 21, 23, 26, 29, 33, 35, 37], "each": [0, 1, 3, 4, 5, 6, 8, 10, 12, 14, 17, 20, 30, 32, 33, 35, 36, 37], "earli": 33, "earlier": [2, 35, 37], "earn": 33, "eas": [32, 35], "easi": [1, 2, 4, 8, 25, 33, 37], "easier": [4, 33, 35, 37], "easiest": [0, 1, 30], "easili": [2, 3, 4, 6, 7, 10, 14, 15, 16, 17, 25, 30, 32, 33, 35, 37], "econometr": 33, "ecosystem": 2, "edit": [1, 2, 3, 9, 16, 17, 20, 30, 32, 33, 35, 36, 37], "editor": [0, 3, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 20, 21, 25, 30, 32], "effect": [0, 2, 33], "effici": [4, 32], "effort": 35, "either": [0, 1, 4, 10, 17, 19, 23, 25, 26, 29, 33, 35, 36], "elaps": 10, "element": [4, 12, 14, 17, 30, 33, 35, 36, 37], "elementari": 33, "elimin": 33, "els": [14, 26, 27, 29], "elsewher": [23, 29, 32], "email": 35, "embed": 36, "emerg": [27, 28, 37], "emit": 36, "empir": 37, "emploi": 37, "employe": 0, "empti": [4, 37], "enabl": [2, 3, 4, 6, 7, 10, 13, 14, 26, 32, 33, 35, 37], "encapsul": 35, "encount": [2, 25], "encourag": [1, 33], "end": [0, 16, 32, 33, 35, 37], "end_i": 33, "end_year": 33, "endpoint": 35, "engin": [1, 33, 37], "enhanc": [0, 1, 3, 10, 23, 34], "enjoi": 30, "enorm": 16, "enough": 33, "ensur": [2, 33], "enter": [0, 3, 4, 6, 7, 8, 10, 11, 14, 15, 16, 17, 20, 26, 29, 30, 32, 33, 35, 37], "entertain": 33, "entir": [4, 15, 17, 30, 32, 33, 37], "entri": [2, 4, 12, 15, 16, 30, 32, 35], "entry_point": 35, "env": [0, 2, 23, 37], "environ": [0, 1, 10, 11, 17, 23, 24, 25, 27, 29, 32, 34], "eq": 33, "equal": [33, 37], "equival": 0, "eras": 6, "error": [0, 2, 4, 14, 16, 23, 26, 27, 28, 29, 32, 36, 37], "especi": [22, 24, 25, 33, 35, 37], "essenc": [33, 37], "essenti": 33, "establish": 37, "estim": [33, 37], "etc": [0, 2, 4, 15, 17, 33], "etc_hist": 33, "etern": 37, "eth": 33, "ethereum": 33, "evalu": 32, "even": [17, 23, 24, 33, 35, 37], "event": 3, "eventu": 35, "ever": 30, "everi": [3, 4, 12, 14, 23, 24, 32, 35, 36], "everyon": [1, 27, 30, 32], "everyth": [0, 2, 23, 29, 30, 32, 33, 35, 37], "evid": 37, "exact": 14, "exactli": [3, 29], "examin": [29, 37], "exampl": [0, 3, 4, 13, 14, 16, 17, 30, 32, 33, 35, 37], "exceed": 33, "excel": [33, 37], "except": [2, 26, 33, 37], "exchang": 35, "exclam": 3, "exclud": 6, "execut": [0, 1, 3, 4, 8, 10, 14, 16, 17, 19, 20, 25, 26, 30, 32, 33, 35, 37], "exercis": 35, "exist": [0, 2, 4, 10, 15, 16, 17, 23, 27, 32, 33, 35, 37], "exit": 0, "exp_real_ret": 33, "expand": [5, 6, 10, 12, 14, 16, 17, 32], "expect": [23, 29, 35, 37], "expected_pr": 33, "experi": [1, 4, 33, 35, 37], "experienc": [2, 24, 27, 29], "experiment": 2, "expert": [2, 23, 24], "explain": [29, 35, 37], "explan": 37, "explor": [1, 2, 3, 4, 9, 10, 11, 13, 15, 20, 23, 26, 27, 30, 32, 34, 35], "export": [0, 13, 37], "expos": 35, "express": [4, 6, 10, 32, 37], "extend": [35, 36], "extended_output": 33, "extens": [5, 6, 14, 20, 32, 35, 36], "extent": [33, 37], "extern": [0, 2, 4, 5, 9, 32], "extra": 35, "extract": [33, 37], "f": [0, 4, 11, 12, 32, 33, 35, 37], "f10": [14, 32], "f12": 3, "f2": 4, "f3": 4, "f5": 4, "f6": 4, "f8": [16, 32], "f9": [4, 33, 37], "f_critic": 37, "f_onewai": 37, "f_valu": 37, "fa": 35, "face": 2, "facilit": 35, "fact": [33, 35, 37], "factori": 0, "fail": [14, 16, 26], "fairli": [25, 37], "fals": [33, 35, 37], "famili": 33, "familiar": [1, 3, 22, 27, 30, 32, 33, 37], "faq": 2, "far": 37, "fast": [3, 37], "faster": [2, 32, 35, 37], "fastest": 33, "favor": 33, "favorit": [33, 35], "featur": [0, 1, 2, 6, 7, 9, 13, 17, 20, 23, 24, 30, 32, 33, 36, 37], "fedora": 2, "feel": [35, 37], "few": [2, 25, 35, 37], "ffill": 33, "field": [0, 6, 10, 11, 14, 16, 32, 35, 37], "fifth": 35, "fig": [33, 37], "fig_dim": 37, "figsiz": [33, 37], "figur": [3, 4, 13, 27, 30, 32, 33, 37], "file": [0, 2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 23, 25, 26, 30, 32, 33, 35, 36], "filenam": [5, 6, 14, 16, 32], "filesystem": 5, "fill": [10, 29, 36], "filter": [5, 6, 17, 37], "final": [0, 2, 3, 4, 6, 10, 13, 14, 16, 17, 20, 22, 25, 27, 30, 32, 34], "financ": 33, "financi": [34, 35, 37], "find": [0, 5, 7, 9, 11, 16, 17, 22, 23, 24, 26, 29, 30, 32, 33, 35, 37], "find_crypto_pair": 33, "finish": [35, 37], "firewal": 26, "first": [0, 1, 2, 10, 14, 17, 25, 26, 28, 29, 31, 32, 34, 37], "fit": [32, 33, 36, 37], "fivethirtyeight": 33, "fix": [0, 1, 2, 23, 25, 26, 27, 29, 32, 35, 37], "fixm": 16, "flag": 4, "float": [33, 35, 37], "float64": 33, "flow": 3, "fluctuat": 33, "fly": 4, "focu": 35, "focus": [0, 10], "folder": [0, 2, 5, 8, 10, 15, 16, 23, 25, 32, 35], "follow": [0, 1, 2, 4, 12, 19, 20, 21, 23, 25, 26, 27, 29, 30, 33, 35, 36, 37], "followup": 14, "font": [4, 11, 30, 33, 35, 36], "forecast": 33, "forg": [0, 2, 19, 20, 21, 23, 33, 35], "forget": 33, "form": [29, 36], "formal": [33, 35], "format": [5, 7, 13, 17, 29, 32, 33, 35], "formatt": 33, "former": 24, "forti": 17, "fortun": [35, 37], "forum": 23, "forward": [11, 13], "found": [0, 6, 23, 33, 35, 37], "four": [30, 32, 35, 37], "fourth": 35, "fpalm": 35, "fragment": 4, "framework": [35, 36], "francesco": 35, "francisco": 35, "free": [0, 1, 24, 35], "freedom": 37, "freeli": [0, 30], "frequenc": [33, 37], "frequent": [1, 25, 33, 37], "fresh": [2, 10, 23], "friendli": 35, "from": [0, 3, 4, 5, 6, 7, 8, 10, 11, 13, 15, 16, 17, 19, 20, 23, 24, 26, 28, 29, 30, 32, 33, 35, 36], "from_dict": 33, "front": 36, "full": [0, 2, 4, 7, 8, 10, 12, 16, 23, 24, 29, 33, 35, 37], "full_nam": 35, "fulli": [0, 2, 3, 17, 29], "fun": [33, 37], "function": [0, 1, 2, 3, 5, 7, 9, 10, 12, 14, 15, 19, 22, 25, 30, 32, 35, 36, 37], "fundament": [34, 35], "further": [2, 23, 26, 30, 32, 34, 36], "furthermor": [3, 17], "futur": [2, 6, 19, 20, 21, 26, 30], "g": [0, 2, 3, 4, 10, 21, 23, 26, 29, 33, 35, 37], "gadget": 36, "gain": 33, "gather": 37, "gb": 0, "gear": 0, "gender": 37, "gener": [0, 2, 3, 4, 11, 13, 16, 17, 24, 25, 27, 29, 30, 32, 35, 36, 37], "gentoo": 2, "get": [0, 1, 2, 9, 10, 11, 22, 23, 24, 25, 26, 27, 29, 31, 32, 33, 34, 37], "get_conf": 35, "get_contain": 35, "get_descript": 35, "get_icon": 35, "get_nam": 35, "get_path": 26, "get_plugin": 35, "get_tooltip": 35, "get_transl": 35, "get_valu": 35, "git": [5, 14, 15, 35], "github": [1, 2, 23, 27, 29, 35], "github_org": 35, "github_usernam": 35, "gitk": 15, "gitter": 2, "give": [4, 5, 16, 17, 27, 33, 35, 36, 37], "given": [0, 2, 3, 5, 14, 15, 25, 33, 35], "glass": 11, "global": [3, 16, 17, 32], "gmail": 35, "gnu": [2, 8, 35], "go": [0, 3, 10, 12, 14, 16, 20, 21, 24, 25, 26, 28, 30, 32, 33, 35, 37], "goal": 34, "gone": 32, "good": [23, 26, 27, 29, 33, 35, 37], "goog": 33, "googl": [2, 29, 33, 37], "got": 24, "gp": [35, 36], "graham": 33, "graph": [33, 36, 37], "graphic": [2, 3, 10, 13, 33, 35, 36, 37], "great": [2, 24, 37], "greater": 37, "green": [30, 32, 35, 37], "grew": 33, "grid": 17, "gross": 33, "group": [2, 12, 33, 36, 37], "group_bi": 33, "groupbi": 37, "grow": 33, "growth": 33, "guarante": 17, "gui": [3, 10, 17, 23, 35, 36], "guid": [0, 1, 7, 22, 23, 24, 29, 30, 33, 35, 37], "guidelin": [23, 33, 35], "guru99": 35, "gz": 35, "h": 32, "ha": [0, 3, 4, 7, 10, 15, 17, 24, 27, 29, 32, 33, 35, 36, 37], "had": 33, "hamburg": [4, 7, 8, 35], "hand": [33, 37], "handi": 4, "handl": [23, 35, 37], "handler": 36, "happen": [17, 29, 33, 36, 37], "happi": [30, 32], "harpercollin": 33, "hasn": 29, "have": [0, 1, 2, 3, 4, 7, 10, 11, 15, 16, 17, 19, 20, 21, 24, 25, 26, 29, 30, 32, 33, 35, 36, 37], "header": 17, "heart": 30, "heat": 17, "heatmap": 17, "heavi": 33, "heavyweight": 33, "height": 37, "hello": [30, 32, 35], "help": [0, 4, 9, 10, 23, 26, 27, 28, 29, 30, 32, 33, 35], "helper": 35, "her": 37, "here": [0, 2, 7, 22, 28, 29, 30, 32, 33, 35, 37], "hesit": 35, "hi": 37, "hidden": [5, 35], "hide": [4, 5, 12, 17, 20, 30, 32], "hierarch": [5, 14, 32], "high": [0, 33, 35], "higher": [33, 37], "highest": [33, 37], "highlight": [0, 3, 6, 8, 12, 16, 23, 30, 32, 35], "hilpisch": 33, "hint": [0, 25], "hist": [33, 37], "histogram": [17, 37], "histori": [3, 9, 10, 16, 30, 33, 35], "historic_crypto": 33, "historicaldata": 33, "histplot": 37, "hit": [19, 33, 37], "hold": [33, 35], "home": [0, 2, 8, 10, 11, 23, 24, 25, 35], "homebrew": 2, "hope": [30, 33, 35, 37], "hopefulli": [26, 27], "horizont": [4, 30, 37], "host": 10, "hostnam": 10, "hour": 29, "hous": 11, "hover": [0, 4, 9, 25], "how": [0, 1, 2, 3, 4, 5, 10, 12, 13, 19, 23, 24, 27, 29, 30, 32, 33, 34, 36], "howev": [0, 2, 5, 25, 30, 33, 35, 37], "html": [35, 37], "http": [33, 35, 37], "hub": 24, "huge": 23, "human": 35, "hurri": 35, "husl": 37, "hyperlink": 32, "hypothesi": 34, "i": [0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 23, 24, 25, 26, 27, 29, 30, 32, 35, 36, 37], "icon": [4, 7, 8, 9, 11, 13, 30, 32, 35], "icon_manag": 35, "id": [2, 4, 10, 22, 23, 24, 25, 35, 37], "id_rsa": 10, "idea": [29, 35, 36], "ideal": [17, 33, 37], "ident": [0, 6, 14, 23], "identif": 37, "identifi": [14, 32, 35, 37], "idl": 0, "ignor": [3, 37], "ill": [0, 27, 28], "iloc": [33, 37], "ima": 35, "imag": [2, 4, 13, 17, 33, 37], "immedi": [2, 20, 26, 37], "implement": [24, 25, 33, 35, 36, 37], "impli": 37, "implicitli": 30, "import": [0, 2, 3, 9, 10, 15, 22, 25, 26, 32, 33, 35, 37], "impos": 15, "imposs": 23, "improv": [0, 4, 17, 31, 37], "includ": [0, 1, 2, 3, 4, 5, 7, 10, 11, 12, 17, 24, 25, 28, 30, 32, 35, 37], "incompat": [0, 2], "incomplet": 25, "inconceiv": 35, "inconsist": 37, "incorpor": 35, "increas": [14, 32, 33, 35], "inde": [27, 37], "indent": 29, "independ": [2, 35], "index": [11, 17, 32, 33], "indic": [14, 17, 30, 32, 33, 35, 36, 37], "indistinctli": 37, "individu": [2, 7, 14, 16, 19, 23, 27, 35, 37], "industri": 33, "influenc": 37, "info": [2, 20, 23, 33, 35], "inform": [0, 2, 10, 14, 17, 20, 23, 24, 26, 29, 30, 32, 35, 36, 37], "infrastructur": 0, "inher": 17, "initi": [33, 35, 36, 37], "inlin": [0, 3, 7, 10, 32], "inner": [17, 23, 35], "inplac": [33, 37], "input": [20, 35, 36, 37], "insert": [0, 17, 29, 35, 37], "insid": [0, 4, 5, 10, 11, 14, 15, 20, 21, 26, 32, 33, 35, 36], "insight": 33, "inspect": [0, 1, 7, 10, 17, 33, 35, 37], "inspector": 17, "instal": [1, 3, 10, 11, 14, 18, 23, 24, 26, 27, 29, 30, 32, 33, 35, 37], "instanc": [10, 17, 23, 25, 26, 35, 36], "instanti": 35, "instantpopup": 35, "instead": [0, 2, 5, 12, 17, 23, 26, 27, 32, 33, 35, 37], "instruct": [0, 2, 23, 33, 35, 37], "instrument": 33, "insuffici": 7, "int": [30, 35, 37], "int64": 37, "integ": 37, "integr": [2, 3, 4, 10, 15, 21, 33, 35, 37], "intel": 2, "intellig": [16, 33, 37], "intend": [33, 37], "intens": 0, "interact": [1, 3, 4, 10, 13, 17, 20, 21, 22, 23, 30, 32, 33, 35, 36, 37], "interchang": 17, "interconnect": 36, "interest": [33, 35, 37], "interfac": [1, 8, 9, 20, 22, 30, 35, 36], "interfer": 26, "intermedi": 33, "intern": [0, 7, 23, 29, 35], "internal_valu": 32, "interpret": [0, 3, 7, 9, 10, 21, 23, 25, 26, 29, 32, 33, 37], "interquartil": 37, "interrupt": [7, 10], "interv": [35, 37], "intro": 34, "introduc": 35, "introduct": [30, 35], "introspect": 25, "invalid": [16, 32], "invest": 33, "investig": 37, "investor": 33, "invis": [5, 8], "invok": 37, "involv": [1, 2, 23, 25, 29, 33, 35, 37], "ip": [0, 10], "ipdb": 9, "ipykernel": [23, 25], "ipynb": 20, "ipython": [0, 3, 4, 7, 8, 9, 13, 14, 17, 18, 21, 23, 24, 25, 27, 29, 30, 32], "ipython_genutil": 0, "is_dark_font_color": 32, "isc": 35, "isn": [2, 23, 25, 26, 32], "isol": [2, 28], "issu": [0, 1, 2, 4, 16, 21, 23, 24, 26, 27, 28, 32, 33, 37], "item": [0, 1, 4, 9, 12, 14, 17, 19, 20, 21, 23, 25, 29, 32], "iterrow": 37, "its": [0, 1, 2, 4, 5, 7, 10, 11, 12, 14, 16, 17, 23, 24, 25, 26, 29, 30, 32, 33, 35, 36, 37], "itself": [0, 2, 10, 14, 17, 23, 24, 26, 33, 35, 36], "j": [33, 37], "jame": 33, "jnj": 33, "job": 35, "john": 35, "johnson": 33, "join": 33, "json": [0, 10, 37], "juanita": [30, 32], "jump": [4, 12], "jupyt": [4, 10, 20, 23, 35, 37], "jupyter_cli": [23, 25], "jupyter_cor": [23, 25], "just": [0, 2, 3, 8, 11, 12, 15, 16, 17, 21, 23, 26, 27, 30, 32, 33, 35, 37], "k": 37, "kde": 37, "keep": [23, 32, 33, 35, 37], "kei": [7, 9, 14, 17, 22, 25, 29, 30, 33, 35], "kera": 37, "kernal": 10, "kernel": [0, 9, 23, 27, 28, 33, 35, 37], "keyboard": [3, 9, 10, 23, 35], "keyerror": 37, "keyfil": 10, "keyword": [4, 11, 32], "kind": [32, 33, 35, 37], "kirkegaard": 37, "kitti": 37, "know": [23, 32, 33, 35, 37], "knowledg": [33, 35, 37], "known": [2, 26, 36], "kurtosi": 37, "l": [0, 3, 4, 30], "la": 0, "label": [0, 35], "lack": 2, "lambda": [33, 37], "languag": [0, 1, 2, 4, 10, 23, 24, 25, 33, 35, 37], "larg": [0, 17, 24, 32, 33, 37], "larger": [32, 33, 37], "largest": 33, "last": [4, 8, 15, 23, 25, 26, 27, 33, 37], "later": [17, 30, 37], "latest": [0, 2, 23, 25], "latter": [7, 24], "laugh": 37, "launch": [0, 2, 5, 10, 23, 25, 26, 27, 29, 30, 32, 37], "launchpad": 2, "layer": 35, "layout": [30, 35], "lead": [2, 24, 29], "learn": [0, 1, 2, 14, 24, 31, 32, 34], "learner": 34, "learnpython": 24, "least": [0, 24, 26], "leav": [33, 37], "left": [2, 3, 4, 6, 7, 8, 11, 14, 21, 26, 30, 33, 35, 37], "legaci": [10, 35], "len": [33, 37], "length": 33, "leptokurt": 37, "less": [29, 33, 35, 37], "lesser": 33, "let": [4, 30, 32, 33, 34, 37], "letter": [0, 33, 36], "level": [1, 4, 12, 14, 16, 17, 32, 33, 35, 37], "leverag": 33, "li": [23, 27], "librari": [2, 3, 11, 25, 30, 32, 33, 35, 36, 37], "libreoffic": 32, "licens": [0, 35], "lie": 25, "life": 35, "light": 30, "lighter": 2, "like": [0, 2, 3, 4, 5, 8, 11, 14, 15, 16, 17, 23, 25, 27, 29, 30, 32, 33, 35, 37], "limit": [4, 21, 25, 35, 37], "limits_group": 35, "line": [0, 2, 3, 6, 8, 14, 16, 18, 23, 25, 26, 27, 29, 30, 32, 33, 35, 36, 37], "linear": 33, "linestyl": 37, "linewidth": 37, "linger": 23, "link": [2, 11, 24, 33, 35], "linux": [0, 8, 16, 23, 25, 35, 37], "list": [0, 3, 4, 5, 6, 8, 10, 11, 12, 13, 14, 16, 20, 23, 24, 25, 27, 29, 30, 32, 33, 35, 37], "listen": 10, "lite": 2, "litecoin": 33, "littl": 37, "ll": [2, 22, 25, 26, 29, 30, 32, 35], "load": [7, 10, 11, 14, 17, 25, 32, 33, 35, 37], "loc": 33, "local": [3, 11, 14, 17, 20, 32, 33, 35, 37], "locat": [0, 4, 6, 11, 12, 15, 29, 35], "lock": [7, 30], "log": [33, 35], "logarithm": 33, "logger": 35, "long": [0, 8, 10, 16, 25, 33, 35, 36, 37], "long_descript": 35, "long_description_content_typ": 35, "longer": [17, 32, 35], "longest": 32, "look": [2, 10, 11, 16, 20, 23, 24, 27, 29, 30, 32, 33, 35, 37], "loop": [33, 36], "loss": 33, "lost": [33, 37], "lot": 33, "lousi": 33, "lovabl": 37, "lover": 37, "low": 33, "lower": [23, 32, 33, 37], "lowercas": 33, "lowest": [33, 37], "lsp": [0, 4, 35], "ltc": 33, "ltc_hist": 33, "lxml": 33, "m": [0, 2, 10, 12, 14, 19, 30, 32, 33], "m1": 2, "ma": 33, "mac": 23, "machin": [0, 10, 17, 23, 32, 33, 35, 37], "maco": [0, 3, 8, 10, 16, 19, 20, 21, 23, 25, 30, 33, 35, 37], "macport": [0, 2, 29], "made": [4, 35, 37], "magic": 3, "magnifi": 11, "mai": [0, 2, 23, 25, 26, 32, 33, 35], "main": [0, 2, 17, 30, 31, 35, 36], "main_contain": 35, "main_fg_color": 35, "main_sect": 35, "mainli": [33, 37], "maintain": [0, 24, 35], "mainwindow": [26, 32, 36], "major": [2, 23, 35], "make": [0, 2, 4, 5, 8, 11, 15, 20, 21, 23, 25, 26, 27, 29, 32, 33, 35, 37], "makefil": 35, "malici": 17, "mamba": [2, 35], "mambaforg": 2, "manag": [0, 1, 2, 5, 10, 17, 23, 24, 32, 33, 35, 37], "mandatori": 35, "mani": [0, 2, 4, 5, 10, 19, 23, 24, 27, 30, 33, 36, 37], "manipul": [33, 35, 37], "manual": [0, 2, 4, 7, 13, 14, 16, 17, 25, 26, 29, 32, 33, 35, 37], "map": [0, 17, 35], "map0logo": 35, "mapologo": 35, "mark": [8, 17, 35, 37], "markdown": 35, "market": 33, "master": 33, "match": [4, 5, 6, 11, 13, 17, 30, 32, 37], "math": [10, 30, 33], "mathemat": 33, "matlab": 4, "matplotlib": [0, 2, 9, 10, 17, 24, 30, 32, 33, 37], "matpotlib": 2, "matrix": 36, "matter": [33, 37], "matur": 37, "max": [17, 33, 37], "max_": 35, "max_ag": 37, "max_ylim": 37, "maxim": [29, 33], "maximum": [6, 33, 37], "md": 35, "mdi": 35, "mean": [0, 1, 2, 23, 25, 26, 32, 35, 36, 37], "meanwhil": 14, "measur": [14, 32, 33, 35, 37], "median": 37, "meet": 35, "memori": [0, 2, 14, 33, 37], "mention": [0, 22, 25, 35, 36], "menu": [0, 2, 3, 4, 6, 7, 9, 11, 14, 15, 19, 20, 21, 23, 25, 29, 30, 32, 35, 37], "mere": 37, "merg": 33, "messag": [0, 2, 10, 16, 23, 25, 27, 29, 32, 35, 36], "message_nam": 16, "met": 37, "meta": 2, "metapackag": 2, "method": [0, 4, 7, 12, 14, 23, 25, 26, 27, 32, 33, 35, 36], "microsoft": 33, "might": [0, 2, 8, 16, 23, 24, 25, 29, 32, 37], "mile": 37, "millisecond": [19, 35], "min": [17, 33, 35, 37], "min_": 35, "min_ag": 37, "min_ylim": 37, "mind": [35, 37], "miniconda": [0, 2, 33, 35, 37], "miniforg": [0, 2], "minim": [0, 2, 33, 35, 37], "minimum": [33, 35, 37], "minor": [23, 35], "mint": 2, "minut": 35, "miss": [2, 29, 35, 37], "misunderstand": 24, "mit": 35, "mix": 2, "mixin": 35, "mkdir": 37, "mkvirtualenv": 2, "modal": 36, "mode": [3, 4, 9, 35], "model": [0, 33, 37], "modern": 0, "modest": [2, 33, 37], "modifi": [0, 4, 5, 10, 17, 20, 30, 35, 37], "modul": [3, 7, 9, 11, 15, 16, 25, 32, 35], "moment": [19, 20, 21, 35], "monei": 33, "monitor": 30, "month": [23, 33], "monthly_data_1": 33, "monthly_data_2": 33, "more": [0, 1, 2, 4, 10, 12, 14, 16, 17, 19, 21, 23, 24, 25, 29, 30, 32, 33, 35, 36, 37], "most": [0, 2, 4, 14, 22, 23, 25, 26, 27, 30, 32, 33, 35, 36, 37], "mostli": 35, "mous": 33, "move": [5, 11, 30, 32, 33, 35, 37], "movement": 33, "mpl": 33, "msft": 33, "much": [0, 2, 4, 17, 23, 29, 32, 33, 35, 37], "multi": [4, 17], "multiindex": 17, "multilin": 3, "multipl": [4, 5, 12, 37], "multiplatform": [35, 36], "multipli": 33, "multitask": 33, "must": [0, 10, 15, 19, 33, 35, 37], "mute": [10, 32], "mvp": 33, "my": 0, "n": [0, 2, 23, 33, 35, 37], "name": [0, 2, 3, 4, 5, 7, 10, 11, 12, 14, 15, 16, 17, 20, 25, 30, 32, 33, 35, 36, 37], "namespac": [4, 10, 17], "narrow": 23, "nativ": [13, 35, 36], "natur": [33, 37], "navig": [0, 2, 6, 8, 9, 11, 12, 23, 26, 30, 32, 33, 35, 36], "neat": 37, "necessari": [10, 30, 32, 35], "need": [0, 1, 2, 4, 6, 8, 10, 25, 26, 29, 33, 35, 36, 37], "neg": [33, 37], "neither": 37, "neovim": 4, "nest": 12, "netflix": 33, "netflix_info": 33, "network": [0, 35, 36], "never": 30, "new": [0, 1, 2, 3, 4, 10, 13, 15, 17, 20, 21, 23, 24, 25, 27, 30, 32, 33, 35, 37], "newer": [2, 24], "newest": 10, "newli": [35, 37], "next": [2, 4, 10, 19, 21, 25, 30, 32, 33, 35, 37], "nflx": 33, "non": [0, 8, 32, 33, 35, 36], "none": [4, 13, 23, 25, 26, 35], "nor": 37, "norm": 33, "normal": [3, 8, 33, 37], "notabl": 33, "notat": 37, "note": [0, 10, 30, 32, 33, 35, 37], "notebook": [0, 4, 10, 18, 24, 25, 37], "noth": [0, 14, 25, 37], "notic": [32, 33, 35, 37], "notif": [35, 36], "notifi": 36, "now": [0, 2, 19, 30, 32, 33, 35, 37], "nowadai": 33, "np": 33, "npy": 17, "null": 37, "num_group": 37, "num_observ": 37, "number": [2, 3, 4, 5, 6, 8, 10, 14, 16, 17, 19, 24, 25, 32, 33, 35, 37], "numer": [2, 17, 37], "numfocu": 0, "numpi": [2, 10, 24, 30, 32, 33, 37], "o": [0, 12, 26, 29, 33, 37], "object": [0, 4, 7, 9, 10, 11, 14, 30, 32, 33, 37], "observ": [26, 29, 33, 37], "obtain": [2, 19, 30, 34, 37], "obviou": 35, "occasion": [25, 26], "occupi": [33, 37], "occur": [0, 14, 25, 27, 29, 37], "occurr": [6, 8, 32], "odp": 37, "off": [7, 10, 13, 16, 32], "offer": [2, 3, 4, 5, 13, 17, 23, 24, 32, 33, 35, 36, 37], "offici": [33, 35, 37], "offset": 33, "often": [2, 10, 23, 27, 29, 30, 37], "ok": [2, 4, 10], "okai": 35, "okcupid": 37, "old": [2, 37], "older": [2, 30, 37], "on_clos": 35, "on_conf_chang": 35, "on_initi": 35, "on_plugin_avail": 35, "on_preferences_avail": 35, "on_statusbar_avail": 35, "on_toolbar_avail": 35, "onc": [0, 4, 5, 10, 15, 25, 26, 29, 30, 32, 33, 35], "one": [0, 1, 2, 4, 5, 10, 12, 13, 15, 16, 17, 23, 25, 26, 29, 30, 32, 33, 35, 36, 37], "ones": [4, 20, 30, 32, 37], "onli": [0, 2, 4, 5, 6, 7, 10, 14, 17, 23, 25, 26, 27, 32, 33, 35, 36, 37], "onlin": [7, 9, 32, 37], "open": [0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 14, 15, 16, 17, 20, 21, 25, 26, 27, 29, 30, 32, 33, 35, 36, 37], "open_source_licens": 35, "opencollect": 0, "opensus": 2, "openteam": 2, "oper": [0, 2, 8, 9, 15, 30, 32, 33, 35, 37], "opt_weight": 33, "opt_weights_1": 33, "opt_weights_2": 33, "optim": [14, 31, 35], "optimal_weight": 33, "option": [0, 2, 3, 4, 7, 9, 15, 18, 21, 23, 24, 30, 32, 33, 35, 36, 37], "option_correct": 37, "order": [1, 8, 12, 19, 20, 21, 23, 29, 33, 35, 37], "org": [2, 33, 35, 37], "organ": [0, 33, 35, 36], "orient": [2, 33, 37], "origin": [23, 25, 37], "other": [0, 3, 4, 8, 10, 14, 16, 17, 23, 24, 26, 27, 29, 30, 32, 33, 35, 36, 37], "otherwis": [0, 2, 10, 25, 29, 33, 35], "our": [0, 2, 22, 23, 24, 27, 29, 30, 32, 33, 34, 37], "out": [1, 2, 4, 11, 16, 20, 21, 23, 25, 27, 29, 30, 32, 33, 37], "outlier": 37, "outlin": [4, 9, 30, 32, 33], "output": [4, 14, 16, 23, 26, 29, 30, 35, 37], "outsid": [4, 20, 25, 37], "over": [4, 5, 7, 14, 30, 32, 33, 35, 36, 37], "overal": [16, 32], "overflow": [0, 23, 27], "overli": 37, "overrid": [25, 35], "overview": [33, 37], "own": [0, 2, 4, 7, 11, 14, 23, 24, 27, 30, 33, 35, 36], "owner": 37, "p": [4, 35, 37], "p_": 37, "p_valu": 37, "packag": [0, 1, 2, 3, 10, 11, 15, 16, 19, 23, 24, 25, 26, 27, 29, 32, 33, 37], "packt": 33, "pad": 20, "page": [0, 2, 10, 11, 23, 29, 32, 34], "paid": [0, 24], "palett": 37, "palm": 35, "palplot": 37, "pan": 3, "panda": [2, 17, 24, 32, 33, 37], "pane": [0, 1, 19, 20, 21, 22, 23, 25, 29, 30, 31, 35], "panel": [2, 12, 30, 33, 36, 37], "paper": [35, 37], "parallel": 36, "paramet": [4, 33, 35, 37], "parent": [14, 35, 36], "parenthes": 37, "parenthesi": [4, 7], "parquet": 37, "pars": [6, 32], "parsed_data_publ": 37, "parser": 32, "part": [0, 4, 5, 22, 26, 33, 35, 37], "parti": [2, 3, 10, 11, 32, 35], "partial": 37, "particip": [33, 35, 37], "particular": [14, 23, 32, 35, 37], "particularli": [2, 5, 23, 24, 26, 32, 33], "partit": 0, "pass": [33, 35, 36, 37], "password": [10, 35], "past": [5, 10, 13, 16, 17, 20, 21, 29, 32, 35], "patch": 28, "path": [0, 4, 5, 10, 12, 14, 15, 16, 19, 23, 26, 30, 32, 33, 35, 37], "pathlib": 35, "pattern": 5, "paus": [26, 35], "pause_pomodoro_tim": 35, "pause_tim": 35, "pause_timer_act": 35, "pct_chang": 33, "pd": [33, 37], "pdb": 3, "peopl": [33, 37], "pep": 4, "per": [0, 4, 19, 33], "percent": 33, "percentag": [19, 33], "perfect": 33, "perform": [0, 5, 11, 14, 15, 17, 23, 32, 33, 35, 37], "period": [33, 35, 37], "permiss": 26, "persist": [17, 33, 37], "person": [2, 35, 37], "pet": 37, "pfe": 33, "pfizer": 33, "phenomenon": 37, "phrase": 8, "pick": 37, "pickl": 17, "pictur": 35, "pid": 10, "piec": [33, 35, 37], "pin": 2, "pip": [0, 23, 25, 29, 33, 35], "pitfal": 23, "pivot": 37, "plabel": 35, "place": [0, 4, 19, 23, 24, 27, 33, 35, 37], "plai": 35, "plain": [7, 16, 29, 30], "plan": 35, "platform": [2, 28, 33, 37], "pleas": [2, 23, 25, 27, 29], "plot": [3, 4, 9, 10, 17, 20, 30, 32, 35], "plt": [33, 37], "plu": [6, 20, 32], "plug": 25, "plugin": [0, 2, 9, 19, 20, 21, 24, 27, 28, 34, 36], "plugin_registr": 35, "plugin_typ": 35, "pluginconfigpag": 35, "pluginmaincontain": 35, "pluginmainwidget": 35, "png": [13, 32], "point": [0, 3, 14, 24, 30, 33, 35, 36, 37], "pointi": 37, "polar": 33, "polish": 37, "pomodoro_button": 35, "pomodoro_default": 35, "pomodoro_limit": 35, "pomodoro_menu": 35, "pomodoro_spin": 35, "pomodoro_tim": 35, "pomodoro_timer_button": 35, "pomodoro_timer_menu": 35, "pomodoro_timer_statu": 35, "pomodoro_timer_toolbar": 35, "pomodoromenusect": 35, "pomodorotimerstatu": 35, "pomodorotoolbaract": 35, "pomodorotoolbarsect": 35, "pop": [2, 4, 30], "popular": [4, 25, 37], "popup": 7, "popupmod": 35, "port": [2, 10], "port_1_exp_r": 33, "port_1_ow": 33, "port_1_sr": 33, "port_1_vr": 33, "port_2_exp_r": 33, "port_2_ow": 33, "port_2_sr": 33, "port_2_vr": 33, "portfolio": 34, "portfolio_return": 33, "portfolio_shap": 33, "portfolio_sharp": 33, "portfolio_volatil": 33, "portion": [7, 29], "pose": 37, "posit": [12, 30, 32, 33, 37], "possibl": [4, 19, 20, 21, 23, 27, 29, 33, 35, 37], "possibli": 37, "post": [2, 24, 26], "pot": 35, "potenti": [2, 4, 16, 32, 37], "power": [1, 4, 16, 20], "powershel": 21, "ppf": 37, "pprint": 33, "pr": 1, "practic": [16, 32, 35, 37], "pre": 36, "preced": 29, "precis": [33, 37], "predefin": 35, "predict": [33, 37], "prefer": [0, 2, 3, 4, 5, 7, 8, 10, 11, 13, 17, 18, 23, 26, 29, 30, 32, 33, 37], "prefil": 29, "prefix": [35, 37], "prepar": 34, "prerequisit": 34, "presenc": 35, "present": [15, 19, 25, 29, 33, 35], "preset": 35, "press": [0, 3, 4, 6, 7, 11, 14, 16, 20, 30, 32, 33, 36, 37], "prettier": 37, "prev_year": 33, "prevent": [10, 13, 32], "preview": [4, 17, 30], "previou": [3, 4, 10, 11, 14, 16, 23, 25, 30, 32, 33], "previous": [7, 20, 30, 32], "price": 33, "primari": [4, 10, 32, 33], "principl": 35, "print": [0, 26, 29, 30, 33, 35, 36, 37], "printf": 17, "prior": [33, 35, 37], "prioriti": [2, 29], "probabl": 37, "problem": [0, 1, 2, 4, 16, 24, 26, 27, 28, 29, 32, 33, 35, 37], "proce": [2, 33, 37], "procedur": [14, 33, 36], "process": [3, 4, 10, 23, 35, 36, 37], "processor": [0, 13, 32], "produc": [13, 37], "product": [26, 33, 35], "profil": [0, 1, 9, 16, 18, 30, 32, 34, 35], "profit": [0, 33], "program": [2, 5, 21, 23, 24, 27, 30, 32, 33, 35, 37], "progress": [14, 35], "prohibit": 0, "project": [0, 1, 4, 5, 6, 9, 12, 32, 35], "project_nam": 35, "project_package_nam": 35, "project_pypi_nam": 35, "project_short_descript": 35, "prompt": [0, 2, 3, 16, 19, 20, 21, 23, 25, 26, 29, 30, 32, 33, 35, 36, 37], "proofread": 1, "properli": 35, "properti": [33, 35], "proport": [33, 37], "protocol": [4, 25], "proven": 37, "provid": [1, 2, 4, 10, 11, 13, 17, 23, 24, 25, 26, 29, 30, 32, 33, 35, 36, 37], "proxi": 37, "psychologi": 37, "psychometr": 37, "pt_limits_layout": 35, "public": [24, 35, 37], "publish": [34, 37], "pure": 7, "purelib": 26, "purpos": [0, 1, 35, 37], "put": [33, 35, 37], "py": [8, 16, 23, 25, 26, 32, 35, 36, 37], "py3": [8, 23, 35], "py39": 2, "pyarrow": 37, "pyc": 35, "pycodestyl": 4, "pydata": [2, 37], "pydoc": 11, "pyenv": 0, "pyflak": 4, "pyl": [0, 25], "pylab": 10, "pylint": [16, 32], "pylintrc": [16, 32], "pypi": [0, 33], "pypi_usernam": 35, "pyplot": [33, 37], "pyqt": [23, 29, 35], "pyqt5": 2, "pysid": 35, "python": [0, 1, 2, 3, 4, 5, 7, 10, 11, 12, 16, 17, 19, 21, 23, 25, 26, 27, 28, 29, 30, 32, 35], "python3": [2, 26], "pythonpath": 15, "pyzmq": [23, 25], "q": [0, 36, 37], "q18154": 37, "q255": 37, "q997": 37, "qaction": [35, 36], "qapp": 36, "qapplic": 36, "qdialog": 36, "qdockwidget": 35, "qevent": 36, "qgridlayout": [35, 36], "qgroupbox": 35, "qhboxlayout": 36, "qicon": 35, "qmainwindow": [35, 36], "qmenu": 36, "qmessagebox": 35, "qspinbox": 35, "qstackedlayout": 36, "qt": [23, 29, 34, 35], "qt5": 3, "qt_mac_wants_lay": 0, "qta": 35, "qtawesom": 35, "qtconsol": [10, 23, 24, 27, 29], "qtgui": 35, "qtimer": 35, "qtoolbar": 36, "qtoolbutton": 35, "qtpy": 35, "qtwidget": 35, "qu4nt": 35, "qualit": 37, "qualiti": [16, 31], "quansight": 0, "quantit": 37, "quantiti": 17, "queri": 33, "question": [1, 2, 24, 27, 33, 37], "question_data": 37, "quick": [2, 20, 24, 30, 33, 37], "quickli": [4, 23, 25, 27, 32, 35, 37], "quickstart": [22, 33, 37], "quirk": 24, "quit": [2, 33, 35, 37], "quotat": 17, "qvboxlayout": [35, 36], "qwidget": [35, 36], "r": [4, 14, 24, 37], "rais": 37, "ram": 0, "ran": 14, "ranaroussi": 33, "random": [29, 33, 37], "randomli": 33, "rang": [1, 16, 24, 33, 37], "rapid": 33, "rate": 35, "rather": [12, 21, 23, 29], "ratio": 37, "raw": 16, "rc": 32, "rcfile": 16, "rcparam": 33, "re": [2, 4, 5, 10, 11, 19, 20, 21, 23, 25, 26, 27, 29, 30, 32, 33, 35, 37], "reach": [1, 33, 35, 37], "read": [2, 4, 23, 26, 27, 34], "read_csv": [33, 37], "read_parquet": 37, "read_text": 35, "readabl": [4, 35, 37], "reader": 35, "readi": [20, 30, 32, 33, 35, 37], "readm": 35, "real": [4, 10, 25, 33, 35, 37], "realist": 33, "realiti": 33, "realized_pr": 33, "realli": [23, 37], "realtim": 11, "rearrang": 30, "reason": [2, 14, 32, 37], "recal": [3, 14, 32], "receiv": [23, 25, 27, 33, 36], "recent": [0, 4, 8, 16, 20, 23, 33, 35], "recogn": [0, 35], "recommend": [0, 2, 26, 27, 28, 33, 35, 37], "record": [26, 33, 37], "recov": 17, "recreat": [2, 33], "recurs": 14, "red": [10, 11, 30, 33], "redistribut": 0, "reduc": [32, 37], "reduct": 37, "refactor": 37, "refer": [2, 3, 25, 26, 33, 35, 37], "refin": 6, "reflect": 33, "refresh": [10, 11, 17, 33], "regardless": [4, 15, 35], "regex": 37, "regist": 10, "register_plugin_prefer": 35, "regul": 37, "regular": [3, 4, 6, 32, 35, 37], "reilli": 33, "reinforc": 33, "reinstal": [0, 26, 27, 28], "rejoic": 37, "rel": [0, 2, 5, 32, 33], "relat": [2, 9, 23, 26, 27, 28, 33, 34, 35, 36], "relationship": [33, 35, 37], "relaunch": 10, "releas": [0, 2, 23, 35], "relev": [4, 23, 25, 27, 29, 37], "reli": 35, "reliabl": [2, 17], "reload": [9, 11, 35], "remain": [32, 37], "remark": 33, "rememb": [8, 10, 16, 33, 35, 37], "remotemachin": 0, "remov": [0, 2, 10, 13, 14, 17, 23, 30, 32, 35, 37], "renam": [5, 10, 17, 21, 25, 33, 35, 37], "rename_axi": 33, "render": [4, 7, 11, 13, 35, 36], "reoccur": 23, "reopen": 23, "reorder": 4, "repair": 26, "repeat": 35, "replac": [0, 16, 25, 26], "repo": [1, 35], "report": [0, 2, 23, 25, 26, 27, 28, 34], "repositori": [0, 1, 2, 5, 14, 15, 25, 33, 34], "repres": [33, 36, 37], "represent": 36, "reproduc": [23, 29], "request": [2, 33, 35], "requir": [0, 1, 25, 33, 35, 36, 37], "resampl": 33, "reset": [0, 8, 23, 26, 30, 35], "reset_index": 33, "residu": 37, "resiz": 17, "resolv": [1, 2, 23, 25, 26, 35], "resourc": [0, 1, 23, 27, 28, 33, 35], "resp": 37, "resp_": 37, "resp_q18154": 37, "resp_q255": 37, "respect": [3, 13, 16, 30, 33, 35], "respond": 35, "respons": [36, 37], "rest": [14, 30, 32, 33, 35, 37], "restart": [0, 8, 10, 19, 20, 21, 23, 25, 30, 35], "restor": [4, 15, 23], "restrict": 0, "result": [0, 4, 6, 9, 11, 16, 17, 19, 25, 26, 27, 30, 32, 33, 35, 37], "retriev": 7, "retrieve_data": 33, "rets_1": 33, "rets_2": 33, "return": [4, 6, 11, 26, 30, 35, 37], "reveal": 37, "review": 33, "rgb": 17, "rich": [2, 7, 30], "right": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 17, 20, 21, 25, 30, 32, 33, 35, 37], "right_answ": 37, "rigor": 37, "ring": 35, "risk": 33, "riski": 33, "robust": 2, "room": 24, "root": [15, 33, 35], "roughli": 33, "routin": 26, "row": [17, 33, 36, 37], "rule": [26, 36, 37], "run": [1, 3, 5, 9, 10, 11, 16, 17, 19, 20, 21, 23, 25, 26, 29, 30, 32, 33, 35, 36], "runtim": [10, 25, 32], "safer": 33, "sage": 37, "sai": [32, 33, 37], "said": 33, "same": [1, 2, 3, 4, 10, 14, 15, 20, 23, 25, 27, 30, 32, 33, 36, 37], "sampl": [29, 37], "satisfi": 37, "save": [2, 4, 6, 10, 13, 14, 15, 17, 20, 32, 33, 36, 37], "savefig": 33, "scalar": 17, "scale": [0, 13, 24, 33], "scatter": 33, "scenario": 33, "scheme": [23, 35], "scienc": [28, 35, 36, 37], "scientif": [0, 1, 2, 32, 33, 34, 35], "scientist": [1, 33, 37], "scikit": 0, "scipi": [2, 28, 33, 37], "scope": [6, 14, 16, 19, 35, 37], "score": [16, 32, 37], "scraper": 37, "scratch": [17, 20], "screen": [20, 25, 36, 37], "screenshot": 33, "script": [0, 2, 4, 5, 10, 16, 19, 23, 30, 32, 33, 37], "scroll": [0, 2, 4, 30, 32], "scrollbar": 4, "sdist": 35, "seaborn": 37, "seamlessli": [33, 37], "search": [2, 4, 9, 11, 17, 24, 29, 32, 33, 37], "second": [14, 30, 32, 34, 35, 37], "section": [0, 1, 2, 4, 16, 23, 25, 26, 27, 29, 30, 32, 33, 35, 37], "secur": [2, 17, 26, 33], "see": [0, 2, 3, 4, 5, 8, 10, 16, 17, 19, 20, 21, 23, 25, 26, 27, 29, 30, 32, 33, 35, 37], "seek": 2, "seem": [25, 33, 37], "seen": [30, 33, 37], "segment": 33, "select": [0, 2, 3, 5, 6, 7, 8, 10, 12, 13, 16, 17, 19, 20, 21, 25, 29, 30, 32, 33, 35, 36, 37], "self": [35, 36, 37], "send": 36, "sens": 33, "sensit": [4, 6, 11], "sep": 37, "separ": [3, 4, 10, 12, 16, 30, 33, 37], "sequenti": 13, "seri": [1, 17, 33, 37], "serif": 33, "seriou": 37, "serv": [20, 33, 35, 36, 37], "servedoc": 35, "server": [0, 4, 11, 20, 25, 35], "servic": [0, 24, 35], "session": [3, 8, 10, 13, 15, 17, 30, 33, 37], "set": [0, 1, 2, 3, 4, 5, 6, 10, 12, 15, 16, 17, 21, 26, 30, 32, 34], "set_axis_label": 37, "set_label": 33, "set_palett": 37, "set_pomodoro_limit": 35, "set_printopt": 33, "setcolumnstretch": 35, "setlayout": 35, "setmenu": 35, "setpopupmod": 35, "setup": [23, 35], "setup_pag": 35, "setuptool": 35, "sever": [3, 4, 5, 10, 13, 17, 29, 30, 32, 33, 35, 36, 37], "sexual": 37, "shape": 37, "share": [33, 34], "sharpe_ratio": 33, "sharpli": 33, "shell": [21, 23], "shift": [0, 3, 4, 12, 33, 35], "short": [30, 33, 35], "shortcut": [0, 2, 3, 7, 8, 9, 10, 14, 16, 23, 26, 32, 35], "shorten": 36, "shotgun": 23, "should": [0, 16, 17, 23, 25, 26, 27, 29, 30, 35, 37], "show": [3, 4, 5, 7, 8, 10, 11, 12, 16, 17, 19, 27, 29, 30, 32, 33, 35, 36, 37], "shown": [4, 7, 8, 10, 13, 15, 17, 19, 29, 32, 35], "side": [33, 35, 37], "sidebar": [4, 32], "sierra": 0, "sign": [4, 12, 33, 37], "signal": 35, "signific": [2, 37], "significantli": [33, 37], "silenc": 32, "sim_weight": 33, "similar": [0, 2, 4, 10, 23, 29, 33], "similarli": 35, "simpl": [1, 33, 35, 37], "simpler": 35, "simpli": [0, 2, 7, 10, 17, 25, 26, 27, 29, 32, 35, 37], "simplic": 37, "sinc": [20, 23, 29, 32, 33, 35, 36, 37], "singl": [5, 16, 26, 33, 35, 36], "site": [0, 24, 35, 37], "situat": [0, 29, 33, 37], "six": [19, 35], "size": [2, 4, 5, 11, 13, 17, 30, 32, 33, 37], "skew": 37, "skill": [33, 35], "skip": [3, 33, 37], "slabel": 35, "sleep": 14, "sleep_wrapp": 14, "slightli": 37, "slow": 0, "slower": 33, "smaller": [2, 33, 37], "smallest": [14, 33], "smarter": 37, "smartscreen": 2, "smoother": 33, "sn": 37, "snippet": [3, 4], "so": [0, 1, 3, 4, 5, 6, 7, 8, 15, 17, 20, 23, 25, 26, 27, 29, 30, 32, 33, 35, 36, 37], "softwar": [1, 26, 35], "sold": 33, "solut": [25, 27, 28], "solv": [0, 1, 2, 23, 26, 27, 29, 33, 37], "some": [2, 4, 7, 22, 25, 26, 27, 30, 32, 33, 35, 36, 37], "someon": 27, "someth": [23, 24, 25, 26, 27, 33, 36, 37], "sometim": [2, 32, 33], "somewhat": [2, 37], "soon": 29, "sort": [4, 12], "sourc": [0, 1, 2, 4, 7, 10, 11, 12, 16, 17, 19, 23, 24, 25, 26, 27, 30, 32, 35], "space": [2, 4, 32, 35, 37], "speak": 37, "special": [9, 12, 25, 29, 33, 35, 36, 37], "specif": [0, 2, 3, 4, 5, 10, 11, 16, 23, 24, 25, 27, 29, 32, 33, 35, 36, 37], "specifi": [14, 29, 32, 33, 35, 37], "speed": [10, 32], "spend": 35, "spent": [14, 19, 32], "sphinx": [7, 35], "spinbox": 35, "spinner": 35, "split": 30, "spoiler": 37, "sponsor": 0, "spot": 4, "spotlight": 2, "spydata": 17, "spyder": [3, 4, 5, 7, 8, 10, 14, 15, 16, 17, 18, 22, 26, 27, 28, 29, 31, 34, 36], "spyder3": 2, "spyder5": 35, "spyder_kernel": [0, 10], "spyder_pomodoro_tim": 35, "spyder_unittest": 25, "spyderpomodorotim": 35, "spyderpomodorotimerconfigpag": 35, "spyderpomodorotimercontain": 35, "spyderwidgetmixin": 35, "squar": [11, 33], "ssh": 10, "sshd": 10, "stabl": [23, 33, 35], "stack": [0, 2, 23, 27, 33, 36], "stage": [0, 37], "stai": [1, 32, 37], "standalon": [0, 19, 20, 21, 29, 33, 35, 37], "standard": [0, 3, 4, 11, 16, 17, 23, 25, 27, 32, 35, 36, 37], "start": [0, 1, 2, 4, 10, 12, 17, 23, 24, 26, 27, 28, 29, 31, 32, 33, 34, 36, 37], "start_i": 33, "start_pomodoro_tim": 35, "start_tim": 35, "start_timer_act": 35, "start_year": 33, "startswith": 37, "startup": [2, 26], "stat": 37, "state": [17, 35, 37], "statement": [3, 8, 14, 35, 37], "static": [7, 13, 33, 37], "statist": [33, 37], "statu": [25, 30, 35, 36], "statusbar": [0, 35], "statusbarwidget": 35, "std": 33, "steadi": 33, "step": [0, 1, 2, 3, 4, 7, 10, 25, 26, 28, 29, 31, 33], "still": [0, 2, 3, 10, 25, 27, 32, 33, 37], "stop": [0, 2, 3, 10, 11, 14, 16, 35], "stop_pomodoro_tim": 35, "stop_tim": 35, "stop_timer_act": 35, "store": [6, 8, 17, 20, 30, 33, 37], "str": 37, "straightforward": [2, 8], "strict": 2, "string": [4, 6, 25, 32, 33, 35, 37], "stroke": [13, 33], "stronger": 19, "strongli": [0, 2, 10, 23, 27], "structur": 32, "style": [16, 17, 30, 32, 33, 35, 37], "stylist": 37, "sub": [14, 27, 32], "subdirectori": 5, "subject": 2, "submenu": 25, "submit": [0, 1, 2, 24, 26, 27, 28], "subplot": 37, "subprocess": 0, "subscrib": 2, "subsect": [4, 12], "subset": 37, "substitut": [2, 35], "subsystem": 0, "succe": 16, "success": [0, 35], "successfulli": 26, "sudo": 2, "suffix": 35, "suggest": [3, 23, 33, 37], "suit": [5, 11], "suitabl": 35, "sum": [33, 37], "summar": [33, 37], "summari": [1, 2, 4, 7, 33, 35, 37], "super": 35, "supervis": 33, "support": [0, 2, 4, 8, 9, 17, 19, 23, 25, 27, 33, 37], "suppos": [14, 33], "suppress": [16, 32, 33], "sur": 0, "sure": [0, 2, 11, 23, 24, 25, 26, 27, 29, 32, 35, 37], "surround": 13, "svg": 13, "switch": [2, 3, 4, 13, 20, 21, 30, 32], "switcher": 12, "sy": [0, 10, 26], "symbol": [10, 33], "symbols_1": 33, "symbols_2": 33, "symmetr": 37, "sympi": [2, 10, 24, 33, 37], "synchron": 32, "syntax": [0, 3, 8, 17, 23, 30, 35], "sysconfig": 26, "system": [0, 2, 5, 8, 10, 15, 21, 23, 26, 29, 32, 35, 36, 37], "systemat": 37, "t": [0, 1, 2, 4, 10, 16, 17, 20, 23, 24, 25, 26, 27, 29, 30, 32, 33, 35, 37], "tab": [0, 3, 5, 10, 12, 13, 19, 20, 21, 30, 32, 33, 36, 37], "tabl": [0, 25, 33], "tag": 35, "tail": 37, "take": [0, 1, 19, 20, 29, 30, 32, 33, 35, 37], "taken": [14, 19, 32, 33, 37], "talent": 35, "tar": 35, "task": [2, 32, 33, 35, 36, 37], "taskbar": 2, "tast": 2, "team": [2, 24, 29, 35], "technic": [10, 37], "techniqu": [26, 35], "technologi": 33, "tell": [27, 32, 35, 37], "templat": [4, 29, 35], "temporari": 20, "ten": 17, "tend": [23, 33], "tensorflow": 37, "term": [0, 33], "termin": [0, 2, 16, 18, 19, 20, 23, 25, 26, 32, 33, 35, 37], "test": [10, 25, 33, 34], "test_item": 37, "text": [0, 4, 5, 6, 7, 8, 16, 17, 21, 30, 32, 35, 36, 37], "textbox": 7, "than": [0, 2, 12, 17, 21, 23, 24, 25, 29, 32, 33, 35, 37], "thank": [2, 33, 37], "thei": [0, 2, 3, 5, 10, 17, 24, 30, 33, 35, 36, 37], "them": [2, 3, 4, 5, 6, 7, 13, 14, 17, 19, 20, 24, 29, 30, 32, 33, 35, 36, 37], "theme": [0, 4, 30], "themselv": 37, "theoret": [33, 37], "theori": [33, 34], "therefor": [2, 14, 32, 33], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 17, 19, 20, 21, 23, 24, 25, 26, 29, 30, 32, 33, 35, 36, 37], "thin": 13, "thing": [35, 36, 37], "think": [34, 35], "third": [2, 3, 10, 11, 32, 34, 35, 37], "this_directori": 35, "thoroughli": 30, "those": [10, 13, 17, 22, 23, 24, 25, 26, 27, 30, 32, 33, 35, 36, 37], "though": [2, 23, 30], "thought": 37, "thousand": [32, 33, 35], "three": [14, 29, 30, 32, 33, 35, 37], "through": [0, 1, 2, 3, 4, 6, 7, 10, 11, 13, 17, 22, 24, 32, 35], "throughout": [22, 33, 35, 37], "thu": [2, 35, 36, 37], "ticker": 33, "time": [3, 4, 10, 14, 15, 19, 25, 26, 29, 32, 33, 35, 36], "timeit": 3, "timeout": 35, "timer": 34, "timestamp": [8, 32], "tip": 35, "titl": [11, 29, 33, 35], "to_datetim": 32, "todai": 37, "togeth": [33, 35, 37], "toggl": [5, 6, 7, 8], "token": 33, "told": 32, "tolist": 37, "too": [16, 17, 20, 30, 37], "took": [14, 32], "tool": [0, 1, 2, 4, 5, 32, 33, 35, 37], "toolabr": 35, "toolbar": [0, 3, 4, 5, 9, 12, 16, 30, 32, 33, 37], "toolbox": 32, "toolkit": [35, 36], "tooltip": 35, "top": [4, 5, 6, 7, 8, 11, 12, 13, 14, 17, 20, 30, 32, 35], "topic": [2, 11, 33, 37], "total": [4, 14, 19, 32], "touch": 35, "tour": 1, "toward": [14, 33, 37], "tqdm": 33, "traceback": [25, 26, 27, 29], "track": [24, 32], "tracker": [1, 2, 23, 27, 29], "trackpad": 33, "trade": 33, "traitlet": 25, "transact": 33, "transcript": [30, 32], "transform": [33, 37], "translat": 35, "transpar": 37, "treat": [4, 17], "tree": [15, 35], "trend": 33, "tri": 29, "triangular": 37, "trick": 28, "tricki": [2, 27], "trigger": [3, 4, 7, 29, 35, 36], "troubleshoot": [1, 2, 4, 24, 25, 27, 29], "true": [33, 35, 37], "trust": 17, "try": [0, 23, 25, 26, 27, 29, 30, 32, 33, 35, 37], "tune": 32, "turn": [7, 10, 14, 16, 32], "tutori": [1, 7, 30, 33, 35, 37], "tweak": 35, "twine": 35, "two": [4, 14, 17, 30, 32, 33, 35, 36, 37], "type": [0, 2, 4, 5, 7, 10, 14, 17, 21, 25, 26, 30, 32, 33, 34, 36, 37], "typic": [0, 2, 4, 8, 10, 35], "tzf": 35, "u": [1, 23, 25, 32, 33, 35, 37], "ubuntu": 0, "ultim": 33, "umr": 10, "un": 14, "unabl": [2, 25], "uncheck": [10, 17, 30, 33], "under": [0, 2, 3, 4, 5, 6, 7, 10, 13, 14, 16, 17, 19, 20, 21, 23, 25, 26, 29, 30, 32, 37], "undermin": 37, "underneath": 14, "understand": [4, 9, 24, 30, 32, 33, 35, 37], "understood": 33, "undesir": 33, "undivid": 35, "undock": [21, 30, 35], "uninstal": [2, 23, 26, 27], "unintend": 2, "uniqu": [1, 37], "unit": [14, 33], "unittest": [0, 25], "unix": 2, "unless": [2, 10, 23], "unlik": [4, 27, 29], "unscientif": 37, "unsupervis": 33, "unsystemat": 37, "until": [23, 33, 35, 36], "unus": 32, "unusu": 29, "unzip": 37, "up": [0, 1, 2, 3, 4, 5, 10, 11, 23, 26, 27, 29, 32, 34], "updat": [17, 23, 25, 30, 32, 33, 37], "update_act": 35, "update_tim": 35, "upgrad": [2, 23], "upper": [21, 33, 35, 37], "uppercas": 33, "upward": 37, "url": 35, "us": [1, 3, 4, 5, 7, 9, 12, 13, 14, 17, 18, 23, 24, 25, 26, 30, 32, 35, 36, 37], "usabl": 0, "usag": [2, 9, 14, 24, 29], "usd": 33, "user": [0, 1, 2, 4, 6, 8, 10, 15, 16, 20, 23, 24, 25, 26, 27, 30, 32, 35, 36, 37], "usernam": [0, 8, 10, 35], "usual": [0, 2, 10, 23, 26, 35, 36], "util": [35, 36, 37], "v": [33, 37], "v3": 35, "valid": [35, 37], "valu": [16, 17, 30, 32, 33, 35, 37], "value_count": 37, "vari": 33, "variabl": [0, 2, 3, 4, 9, 10, 12, 13, 20, 26, 30, 32, 34, 35], "varianc": [33, 37], "variat": [33, 37], "varieti": [0, 1, 4, 17, 23, 25, 32, 33, 37], "variou": [17, 25, 33, 35], "vast": 37, "ve": [0, 1, 2, 5, 8, 10, 17, 23, 24, 29, 32, 35], "vector": 33, "venv": [0, 2, 23], "verbos": 23, "veri": [8, 17, 23, 24, 30, 32, 33, 35, 36, 37], "verifi": [35, 37], "versa": 26, "versatil": 37, "version": [0, 2, 9, 10, 21, 23, 29, 30, 33, 35], "vertic": [4, 30, 35], "via": [0, 2, 3, 7, 10, 15, 17, 26, 35], "viabl": 2, "vibrant": 24, "vice": 26, "video": [0, 1, 23, 24, 30, 32], "view": [3, 4, 5, 6, 8, 11, 12, 15, 16, 19, 20, 21, 23, 25, 27, 29, 30, 32, 33, 35], "viewer": [9, 30], "violat": [16, 37], "virtual": [0, 2, 35, 37], "virtualenv": [0, 23], "virtualenvwrapp": 2, "visibl": [16, 25, 32, 36], "visit": [0, 1, 2, 11, 14, 23, 33, 35, 37], "visual": [1, 17, 33, 34, 35, 36], "vlayout": 35, "volat_ret": 33, "volum": 33, "vscode": [4, 25], "w": [0, 4, 37], "wa": [4, 6, 14, 17, 23, 25, 30, 32, 33, 35, 37], "wai": [0, 1, 2, 3, 5, 8, 13, 19, 20, 21, 23, 28, 30, 32, 33, 35, 36, 37], "walk": 22, "want": [0, 2, 3, 4, 5, 6, 10, 11, 13, 17, 20, 25, 27, 29, 30, 32, 33, 35, 37], "warn": [2, 4, 32, 33, 37], "warren": 33, "watch": [0, 1, 23, 35], "we": [0, 1, 2, 17, 19, 20, 21, 22, 23, 24, 26, 27, 30, 32, 33, 34, 36, 37], "web": [0, 1, 2, 11, 20, 29, 32, 35], "webpag": 0, "websit": [2, 25, 35, 37], "weight": 2, "weights_1": 33, "weights_2": 33, "weim": 33, "welcom": [2, 20, 22, 23], "well": [0, 3, 4, 17, 23, 24, 25, 26, 30, 33, 35, 37], "were": [23, 33, 35, 37], "what": [0, 2, 4, 23, 28, 30, 32, 33, 34, 36, 37], "whatev": [4, 23, 25, 33], "wheel": 35, "when": [0, 2, 4, 5, 7, 8, 10, 11, 12, 17, 19, 20, 21, 30, 32, 33, 35, 36, 37], "whenev": [0, 10, 23], "where": [2, 4, 6, 11, 14, 16, 17, 20, 24, 28, 30, 32, 33, 35, 36, 37], "wherev": [13, 23, 32], "whether": [8, 10, 15, 25, 29, 33, 35, 37], "which": [0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 20, 23, 25, 26, 29, 30, 32, 33, 35, 36, 37], "while": [0, 2, 3, 4, 7, 8, 10, 14, 23, 25, 30, 32, 33, 37], "whisker": 37, "whitespac": 32, "whl": 35, "who": [2, 30, 33, 37], "whole": [0, 4, 16, 32], "why": [16, 23], "wick": 37, "wide": [1, 35, 37], "wider": [0, 32, 37], "widget_class": 35, "width": 33, "wiki": 2, "window": [0, 3, 8, 16, 19, 20, 21, 23, 25, 26, 29, 30, 32, 33, 35, 37], "winpython": [0, 2], "wish": 19, "within": [0, 11, 14, 16, 29, 32, 33, 35, 37], "without": [0, 2, 5, 7, 10, 15, 16, 25, 30, 32, 33, 35, 37], "wizard": 2, "won": [0, 10, 27, 29], "word": [4, 8, 13, 32, 34], "work": [0, 2, 3, 4, 5, 6, 9, 10, 16, 17, 19, 20, 21, 23, 26, 27, 28, 29, 30, 31, 34, 35], "workaround": 0, "workflow": [7, 30], "workon": 2, "workshop": [33, 35, 37], "world": [1, 30, 33, 35, 37], "worri": 37, "worth": 33, "would": [4, 14, 23, 30, 33, 35, 37], "wouldn": 37, "wrap": 8, "write": [32, 33, 34, 35], "written": [1, 23, 25, 27, 30, 33, 37], "wrong": [26, 32, 37], "wrote": 35, "wsl": 0, "wsl2": 0, "x": [32, 33, 37], "x64": 0, "xlabel": [33, 37], "y": [23, 32, 33, 37], "yahoo": 33, "ye": [0, 2, 35], "year": [33, 37], "yet": [2, 33], "yf": 33, "yfinanc": 33, "ylabel": [33, 37], "ylim": 37, "you": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 32, 33, 35, 37], "young": 37, "your": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13, 14, 15, 16, 17, 19, 20, 21, 23, 24, 25, 26, 27, 28, 30, 31, 33, 34, 37], "your_usernam": [23, 25], "yourself": [17, 23], "yve": 33, "z": [32, 37], "zeneca": 33, "zero": [33, 35], "zodiac": 37, "zoom": [3, 11, 13, 20, 21, 32], "zsh": 21}, "titles": ["Frequently Asked Questions", "Welcome to Spyder\u2019s Documentation", "Install Guide", "Debugger", "Editor", "Files", "Find", "Help", "History", "Panes", "IPython Console", "Online Help", "Outline", "Plots", "Profiler", "Projects", "Code Analysis", "Variable Explorer", "Plugins", "Spyder Line Profiler", "Spyder Notebook", "Spyder Terminal", "Tour", "Basic First Aid", "Calling for Help", "Common Illnesses", "Emergency CPR", "First Steps", "Troubleshooting", "Submit a Report", "First Steps with Spyder", "Tutorials", "Working with Spyder", "Financial Data Analysis with Spyder", "Workshops", "Plugin Development with Spyder", "Qt Fundamentals", "Scientific Computing and Visualization with Spyder"], "titleterms": {"": [1, 24, 35], "1": 37, "2": 37, "A": 33, "The": [35, 37], "With": [33, 37], "abil": 37, "about": 0, "action": [35, 36], "activ": 37, "add": 35, "addit": [2, 20], "advanc": [3, 8, 16, 17, 26], "ag": 37, "aid": 23, "all": 25, "altern": 2, "an": [20, 29, 33, 37], "anaconda": [2, 24], "analysi": [4, 16, 33, 37], "analyz": 16, "anoth": 25, "anova": 37, "arrai": 17, "ask": 0, "associ": 5, "attributeerror": 25, "automat": [4, 7], "base": 2, "basic": [23, 30, 36, 37], "beyond": 32, "breakpoint": 3, "bug": 25, "build": [2, 35, 37], "button": 17, "call": 24, "can": [35, 37], "cannot": 25, "carlo": 33, "cell": 4, "chang": [10, 35], "channel": 24, "check": 35, "choos": 6, "class": 4, "code": [1, 4, 16, 32, 33, 37], "cognit": 37, "command": [33, 37], "common": [25, 26], "commun": 1, "comparison": 33, "compat": 25, "complet": [4, 25], "compon": [4, 36], "comput": 37, "conda": [2, 33, 37], "configur": [4, 35], "connect": [10, 20], "consol": [10, 20, 33, 37], "contain": 35, "contribut": 1, "control": [5, 7, 15, 35], "cpr": 26, "creat": [15, 35], "cryptocurr": 33, "custom": 30, "daili": 33, "data": [24, 33, 37], "datafram": 17, "dataset": [33, 37], "debian": 2, "debug": [3, 23], "debugg": 3, "default": 35, "depend": 25, "develop": [2, 35], "deviat": 33, "dialog": 36, "dictionari": 17, "directori": 37, "discov": 35, "distribut": [2, 37], "do": [35, 37], "doc": 1, "docstr": 25, "document": [1, 24], "doe": 25, "download": [2, 33, 37], "edit": 4, "editor": [4, 33, 37], "emerg": 26, "enhanc": 35, "environ": [2, 33, 35, 37], "error": 25, "event": 36, "exchang": 24, "expect": 33, "explain": 33, "explor": [17, 33, 37], "extern": 10, "faq": 24, "featur": [3, 4, 10, 35], "file": [4, 5, 37], "final": [33, 35, 37], "financi": 33, "find": [4, 6], "first": [23, 27, 30, 33, 35], "fit": 13, "format": [4, 37], "found": 25, "frequent": 0, "from": [2, 27, 37], "function": [4, 17, 33], "fundament": 36, "further": [33, 35, 37], "gener": 33, "get": [7, 30, 35], "gitter": 24, "glanc": 33, "go": [1, 4, 27], "goal": [33, 35, 37], "googl": 24, "group": 24, "guid": 2, "ha": 25, "help": [1, 2, 7, 11, 24, 25, 37], "here": 27, "highlight": 4, "histor": 33, "histori": 8, "homework": [33, 35, 37], "hover": 7, "how": [35, 37], "hypothesi": 37, "i": 33, "icon": 12, "id": 33, "ill": 25, "import": 7, "importerror": 25, "improv": 32, "includ": 29, "incompat": 25, "inform": 33, "inlin": 13, "instal": [0, 2, 19, 20, 21, 25], "interest": 1, "interfac": 4, "interpret": 14, "intro": [33, 37], "introduct": [33, 37], "introspect": 4, "ipdb": 3, "ipython": [10, 20, 33, 37], "isol": 23, "issu": [25, 29], "item": 11, "join": 1, "jupyt": 24, "kei": 4, "kernel": [10, 25], "keyboard": 4, "layout": 36, "learn": [30, 33, 35, 37], "learner": [33, 37], "let": 35, "line": [4, 19], "lint": 4, "linux": 2, "list": 17, "local": 10, "look": 1, "lsp": 25, "maco": 2, "main": 32, "matplotlib": 3, "me": 37, "mean": 33, "media": 1, "menu": [5, 8, 10, 12, 13, 16, 17, 36], "method": [2, 37], "miss": 25, "mode": 7, "modul": 10, "mont": 33, "monte_carlo_sharp": 33, "monthli": 33, "mute": 13, "my": 37, "navig": 4, "notebook": 20, "now": 1, "numpi": 17, "object": [17, 25], "obtain": 33, "offici": 24, "onlin": [2, 11], "openteam": 24, "oper": 5, "optim": [32, 33], "option": [5, 6, 8, 10, 12, 13, 16, 17, 20], "org": 24, "other": [2, 25], "our": [1, 35], "outlin": [12, 13], "overflow": 24, "packag": 35, "page": [24, 35], "pane": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 32, 33, 37], "panel": 4, "part": 1, "patch": 23, "pharmaceut": 33, "pip": 2, "platform": 24, "plot": [13, 33, 37], "plugin": [14, 18, 25, 35], "pomodoro": 35, "pomodorotimertoolbar": 35, "portfolio": 33, "prefer": [21, 35], "prepar": [33, 37], "prerequisit": [33, 35, 37], "problem": [23, 25], "profil": [14, 19, 33, 37], "project": [15, 24], "propag": 35, "publish": 35, "pypi": 35, "python": [24, 33, 37], "qt": 36, "qualiti": 32, "question": 0, "ratio": 33, "read": [33, 35, 37], "realiz": 33, "recommend": 23, "regist": 35, "reinstal": 23, "relat": [3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 24, 37], "religion": 37, "reload": 10, "remot": 10, "replac": 4, "report": [29, 37], "repositori": 35, "research": 37, "resourc": 24, "result": 14, "return": 33, "review": 35, "run": [0, 2, 4, 14, 37], "scienc": 24, "scientif": 37, "scipi": 24, "search": 6, "second": 33, "section": 24, "select": 4, "selector": 4, "serios": 37, "set": [33, 35, 37], "share": 37, "sharp": 33, "shortcut": 4, "should": 33, "show": 13, "signal": 36, "simul": 33, "slot": 36, "social": 1, "solut": 26, "special": 10, "split": 4, "spyder": [0, 1, 2, 19, 20, 21, 23, 24, 25, 30, 32, 33, 35, 37], "spyderdockableplugin": 35, "spyderpluginv2": 35, "stack": 24, "standalon": 2, "standard": 33, "start": [25, 30, 35], "step": [23, 27, 30, 35, 37], "stock": 33, "stop": 25, "string": 17, "structur": 35, "style": 4, "stylish": 37, "submit": 29, "subreddit": 24, "support": [3, 5, 10, 24], "switcher": 4, "syntax": 4, "tab": 4, "tag": 24, "termin": 21, "test": [35, 37], "testpypi": 35, "theori": 37, "think": 37, "third": 33, "timelin": 33, "timer": 35, "toolbar": [11, 13, 17, 35, 36], "tour": 22, "translat": 1, "trick": 26, "troubleshoot": [0, 23, 28], "try": 2, "tutori": 31, "type": 35, "ubuntu": 2, "understand": 7, "up": [33, 35, 37], "updat": [0, 2, 35], "upload": 35, "us": [0, 2, 6, 8, 10, 11, 15, 16, 19, 20, 21, 33], "usag": 8, "variabl": [17, 33, 37], "version": [5, 15, 25], "viewer": 17, "virtual": 33, "visual": 37, "volatil": 33, "wai": 29, "want": 1, "we": 35, "websit": 24, "weight": 33, "welcom": 1, "what": [29, 35], "where": [1, 27], "why": [33, 37], "widget": [35, 36], "window": [2, 13, 36], "word": [33, 35, 37], "work": [15, 25, 32, 33, 37], "workshop": 34, "write": [1, 37], "yml": 37, "your": [1, 29, 32, 35], "youtub": 24}}) \ No newline at end of file diff --git a/current/troubleshooting/basic-first-aid.html b/current/troubleshooting/basic-first-aid.html index bda938d51..352e362c0 100644 --- a/current/troubleshooting/basic-first-aid.html +++ b/current/troubleshooting/basic-first-aid.html @@ -1,579 +1,474 @@ - - + + + - + + Basic First Aid — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    +
    +
    + +
    + +
    + + + + +
    +
    - - - - - - - - +
    - - - - - - -
    - -
    -
    -
    -

    Basic First Aid

    + +
    + +
    +

    Basic First Aid#

    These suggestions, while more of a shotgun approach, tend to fix the majority of reported issues just on their own.

    - - -
    +
    +

    Reinstalling Spyder#

    If none of the previous steps solve your issue, you should do a full uninstall of Spyder by whatever means you originally installed it.

    For Anaconda, follow all the steps under Option B in the Anaconda uninstall guide, delete the Anaconda directory wherever it was originally installed, and (on Windows) remove the %appdata%/python directory if it exists.

    Deleting appdata/python directory

    Then, do a clean install of the latest version of the Anaconda distribution which is how we recommend you install Spyder and keep it up to date.

    -
    +

    Important

    While you are welcome to get Spyder working on your own by one of the many other means we offer, we are only able to provide individual support for install-related issues for users of the Anaconda distribution. In particular, pip installation, while doable, is only really for experts, as there are many pitfalls involved and different issues specific to your setup, which is why we recommend using Conda whenever possible. -For further information, please visit our Installation Guide.

    -
    +For further information, please visit our Install Guide.

    -
    -

    Isolating problems

    +
    +
    +

    Isolating problems#

    If you get an error while running a specific line, block, or script/program, it may not be an issue with Spyder, but rather something lower down in the packages it depends on. Try running it in the following in order if and until it starts working as you expect. If you manage to isolate the bug, report it to the last one it doesn’t work in.

    @@ -648,195 +543,139 @@

    Isolating problemspython path/to/your/file.py or launched interactively with python from your Anaconda Prompt/Terminal/command line (Windows/Mac/Linux). While it is not impossible that you’ve found Python bug, it is much more likely to be an issue with the code itself or a package you are using, so your best sources are the Python docs and the other resources listed above.

    -
    +

    Tip

    If the problem reoccurs in a similar or identical way with any of these methods (other than only Spyder itself), then it is almost certainly not an issue with Spyder, and would be best handled elsewhere. As we usually aren’t able to do much about issues not related to Spyder, a forum like Stack Overflow or the relevant package’s docs is a much better place to get help or report the issue.

    See the Calling for Help section for other places to look for information and assistance.

    -
    -
    -

    Debugging and patching

    +

    +
    +

    Debugging and patching#

    If you know your way around Python, you can often diagnose and even fix Spyder issues yourself, since the IDE is written in the same language you use in it. You can explore the error messages you’re receiving and Spyder’s inner workings with the Internal Console, available under the menu item View ‣ Panes ‣ Internal Console.

    Spyder showing Internal console

    For more detailed debug output, start Spyder from the command line (Anaconda Prompt on Windows) with spyder --debug-info verbose.

    Even if you don’t manage to fix the problem yourself, this output can be very helpful in aiding us to quickly narrow down and solve your issue for you.

    -
    -
    + + -
    + - - - - -
    +
    + + +
    +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/troubleshooting/call-for-help.html b/current/troubleshooting/call-for-help.html index 26fa8b0e1..b2e2b5ce4 100644 --- a/current/troubleshooting/call-for-help.html +++ b/current/troubleshooting/call-for-help.html @@ -1,937 +1,679 @@ - - + + + - + + Calling for Help — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    + +
    + +
    + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Calling for Help

    + +
    + +
    +

    Calling for Help#

    Aside from this troubleshooting guide, there are a number of other sources of documentation and troubleshooting information you can check before submitting an issue, as they might already offer an answer, or at least help you better understand the problem. Even if we aren’t able to help you, these places might.

    -
    +
    +

    Spyder’s YouTube channel#

    Our YouTube channel contains helpful videos that will guide you through many of Spyder’s features, and provide a starting point for newer users.

    -
    -
    -

    Spyder Gitter

    + +
    +

    Spyder Gitter#

    We have a public Gitter room where you can chat directly with the Spyder developers. If you’ve got a quick question to ask the team and are looking for a quick answer, this is a great place to go.

    -
    -
    -

    Spyder Google Group

    + +
    +

    Spyder Google Group#

    Our Google Group is great for help-related questions, particularly those you aren’t sure are a full-on Spyder issue.

    -
    -
    -

    Spyder website

    + +
    +

    Spyder website#

    The Spyder site contains basic information about the IDE and links to many other helpful resources.

    -
    -
    -

    Stack Overflow tag

    + +
    +

    Stack Overflow tag#

    Stack Overflow is a great place to start searching and posting, particularly if your question is more programming-related, or has to do with something specific to your own code. It has an vibrant Spyder community as well, with new questions posted every day, and the developers (especially Carlos Cordoba, the lead maintainer) are active in answering them.

    -
    -
    -

    OpenTeams support

    + +
    +

    OpenTeams support#

    On OpenTeams, you can get help from expert Spyder consultants. OpenTeams offers services from Spyder experts ranging from a brief consultation to an experienced team to help you with a large scale implementation project.

    -
    -
    -
    -

    Python resources

    -
    -

    Official Python help page

    + + +
    +

    Python resources#

    +
    +

    Official Python help page#

    The Python help page is a great resource that lists a number of places you can get assistance, support and learning resources for the language and its packages.

    -
    -
    -

    Python documentation

    + +
    +

    Python documentation#

    The Python docs can help you understand a number of issues that can be caused by quirks in the language itself, or misunderstandings as to how it behaves.

    -
    -
    -

    Python subreddits

    + +
    +

    Python subreddits#

    r/python and r/learnpython are resources you can use to ask about and discuss issues with Python and its packages. The former is aimed more at general Python usage, and the latter more specifically at beginners.

    -
    -
    -
    -

    Data science/SciPy resources:

    -
    -

    Anaconda help

    + + +
    +

    Data science/SciPy resources:#

    +
    +

    Anaconda help#

    The Anaconda docs site offers free community help and documentation for the Anaconda applications, installing the Anaconda distribution, and using the Conda package and environment manager; along with paid support options.

    -
    -
    -

    SciPy.org website

    + +
    +

    SciPy.org website#

    The Scipy website is the the central home of the SciPy stack, with information, documentation, help, and bug tracking for many of the core packages used with Spyder, including NumPy, SciPy, Matplotlib, Pandas, Sympy and IPython.

    -
    -
    -

    Project Jupyter

    + +
    +

    Project Jupyter#

    Jupyter is the development hub for IPython, Spyder’s QtConsole, Jupyter notebooks used with the Spyder-Notebook plugin, and more.

    -
    -
    -

    Data Science Stack Exchange

    + +
    +

    Data Science Stack Exchange#

    The Data Science site in Stack Exchange can be very useful for questions that relate more to data science than programming specifically.

    -
    -
    -
    + + + -
    + - - - - - + + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/troubleshooting/common-illnesses.html b/current/troubleshooting/common-illnesses.html index 6b265a3c1..b37bca715 100644 --- a/current/troubleshooting/common-illnesses.html +++ b/current/troubleshooting/common-illnesses.html @@ -1,593 +1,484 @@ - - + + + - + + Common Illnesses — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    + +
    + +
    + + + + +
    +
    - - - - - - - - +
    - - - - - - -
    - -
    -
    -
    -

    Common Illnesses

    + +
    + +
    +

    Common Illnesses#

    Beyond the general troubleshooting steps, some frequently-reported problems require more specialized solutions.

    -
    -

    Errors starting the kernel

    +
    +

    Errors starting the kernel#

    If you receive the message An error occurred while starting the kernel in the IPython Console, Spyder was unable to launch a new Python interpreter in the current working environment to run your code. There are a number of problems that can cause this, but most can be fixed fairly quickly with a few easy steps.

    -
    -

    Spyder-Kernels not installed/incompatible

    +
    +

    Spyder-Kernels not installed/incompatible#

    Spyder requires a supported version of the spyder-kernels package to be present in the working environment you want to run your console in.

    Kernel version error dialog

    It is included by default with Anaconda, but if you want to run your code in another Python environment or installation, you’ll need to make sure it’s installed and updated to the latest version.

    Check the required version of spyder-kernels for your version of Spyder in the following table:

    - - ---- +
    Spyder and Spyder-Kernels version compatibility
    + @@ -632,6 +523,7 @@

    Common Illnessesspyder-kernels. If using Anaconda, open a terminal (Anaconda Prompt on Windows) and run:

    -
    -

    Issue with another dependency

    + +
    +

    Issue with another dependency#

    If the kernel displays a long error traceback that mentions other packages like ipython, ipykernel, jupyter_client, traitlets or pyzmq, the problem may be an out of date or incompatible version of a dependency package. To fix this, activate the environment and update the key dependencies.

    In an Anaconda environment:

    @@ -657,52 +549,54 @@

    Issue with another dependency
    pip install -U spyder-kernels ipython ipykernel jupyter_client jupyter_core pyzmq traitlets
     

    -
    -
    -

    AttributeError/ImportError

    + +
    +

    AttributeError/ImportError#

    Check the last few lines of the error message, and see if its an AttributeError or ImportError, or refers to a file you created in your current working directory or your home folder (C:/Users/YOUR_USERNAME on Windows, /Users/YOUR_USERNAME on macOS, or /home/YOUR_USERNAME on Linux).

    Spyder's AtributeError dialog

    If so, the the error is likely due to your file being named the same as a Python standard library module, such as string.py or time.py, which overrides the built-in module that Spyder-Kernels is trying to load. To fix this, simply rename your file to something other than one of these names, and try restarting the kernel. To check the names of these modules, see the list in the Python standard library documentation.

    -
    - -
    -

    Completion/help not working

    + + +
    +

    Completion/help not working#

    To provide code completions, help and real-time analysis in the Editor, Spyder uses the Python Language Server (PyLS), an implementation of the Language Server Protocol specification used by VSCode, Atom and other popular editors/IDEs. Most help and completion issues lie outside of Spyder’s control, and are either limitations with PyLS or the code that is being introspected, but some can be worked around.

    -
    -

    Object missing docstring

    +
    +

    Object missing docstring#

    If nothing is displayed in the calltip, hover hint or help pane, the object you’re trying to introspect may not have a docstring.

    -Docstring not found in help pane +Docstring not found in help pane +

    In this case, the only solution is to add one in the source code of the original function, method or class.

    -
    -
    -

    Object cannot be found

    +
    +
    +

    Object cannot be found#

    Some objects, whether due to being written in C, Cython or another language; generated dynamically at runtime; or being a method of an object you create, cannot be easily found without executing the code.

    -Object not found in help pane +Object not found in help pane +

    However, once you run your code in the IPython Console, you might be able to get help and completions on the object there.

    -
    -
    -

    LSP has stopped working

    + +
    +

    LSP has stopped working#

    Occasionally, especially after using Spyder for a while, code completion, help and analysis may stop working. If this is the case, you can check LSP status with the LSP Python item in Spyder’s status bar at the bottom of the screen, and restart it by right-clicking it and selecting the Restart Python Language Server item.

    Spyder with LSP restart dialog -
    -
    -

    Spyder bug/dependency issue

    + +
    +

    Spyder bug/dependency issue#

    Given the variety of dependencies involved in making LSP work, an incompatible or out of date version in your environment can result in error messages, incomplete results, or help/analysis not working at all.

    To address this, first try updating Anaconda and Spyder as described in Basic First Aid. If the issue still isn’t resolved, update the various relevant dependencies with:

    conda update python-language-server
     
    -
    - -
    -

    Plugin Problems

    -
    -

    Plugin does not work at all

    + + +
    +

    Plugin Problems#

    +
    +

    Plugin does not work at all#

    If you have installed a Spyder plugin, but you can’t see it, go to the Panes submenu of the View menu and select the plugin’s name, which should make its pane visible. If you don’t see the plugin there, select the Dependencies item under the Help menu and see if the plugin appears at the bottom.

    Dependencies dialog showing Unittest plugin @@ -710,264 +604,146 @@

    Plugin does not work at allimport spyder_unittest to test the Spyder-Unittest` plug-in; this command should run without errors.

    If none of this helps you to resolve the problem, then continue to the next section.

    -

    -
    -

    Other issues

    + +
    +

    Other issues#

    If you get an error which mentions or involves a Spyder plugin, such as spyder-unittest, spyder-terminal or spyder-notebook, or if you encounter any other problem with a Spyder plugin, then the first approach should be to update Spyder and the plugin to their latest versions.

    If this doesn’t fix the problem, you should check the plugin’s website or repository to see if it is compatible with your version of Spyder.

    Finally, if compatibility doesn’t seem to be the problem, please check those repositories to see if an issue was already opened, and report it there if not.

    -
    -
    - + + + - + - - - - - - - - - - - Open chat - +
    +
    + +
    -
    -
    - Connect with us on: - - - GitHub - - - | - - Twitter - - - | - - Facebook - - - | - - YouTube - - - | - - Instagram - - - | - - Google Groups - -
    -
    -
    - - -
    - © 2009-2024 Spyder Doc Contributors | MIT License -
    - -
    - - Powered by Sphinx 3.5.4 - - - | - Page source - -
    -
    -
    -
    + + + + + + + +
    + + +
    \ No newline at end of file diff --git a/current/troubleshooting/emergency-cpr.html b/current/troubleshooting/emergency-cpr.html index 532161cbc..a525bc1c3 100644 --- a/current/troubleshooting/emergency-cpr.html +++ b/current/troubleshooting/emergency-cpr.html @@ -1,580 +1,475 @@ - - + + + - + + Emergency CPR — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    + +
    + +
    + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Emergency CPR

    + +
    + +
    +

    Emergency CPR#

    Is Spyder not launching at all? The steps on this section should hopefully get it back up and running in no time.

    -
    -

    Common solutions

    +
    +

    Common solutions#

    1. Try Basic First Aid first, which usually resolves most Spyder install-related issues.

    2. Make sure Spyder isn’t already running and no Spyder related windows (e.g. Variable Explorer dialogs) are left open, and check that the preference setting Application ‣ Advanced Settings ‣ Use a single instance isn’t checked.

      @@ -587,9 +482,9 @@

      Common solutions -

      Advanced tricks

      +

    +
    +

    Advanced tricks#

    If none of the above solves the problem, you can try starting Spyder directly from its Python source files which may either get it running, or at least provide useful information to help debug the issue further.

    This technique consists of starting Spyder from your terminal (or Anaconda Prompt on Windows) by manually running the Spyder startup routine ( start.py ) with a known good Python interpreter, and observing the results.

    To do so, you’ll need to:

    @@ -626,165 +521,123 @@

    Advanced tricksSubmit a Report section.

    -

    -
    + + -
    + - -
    - -
    - -
    - - - - -
    - -
    -
    -
    -
    - - - +
    + + +
    +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/troubleshooting/first-steps.html b/current/troubleshooting/first-steps.html index be99f8301..b21a8c509 100644 --- a/current/troubleshooting/first-steps.html +++ b/current/troubleshooting/first-steps.html @@ -1,579 +1,474 @@ - - + + + - + + First Steps — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    + +
    + +
    + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    First Steps

    + +
    + +
    +

    First Steps#

    If Spyder crashes or you receive an error message, please read the following troubleshooting steps before opening a new issue. There’s a good chance that someone else has already experienced the same problem, so checking for an existing solution will likely get Spyder working again for you as quickly as possible.

    -
    +

    Important

    To make sure you’re getting the most relevant help for your problem, please make sure the issue is actually related to Spyder:

      @@ -587,163 +482,130 @@

      Topics

      To view it, simply click Show details in the Spyder error dialog.

      Spyder showing view internal console option

      Often, that alone will tell you how to fix the problem on your own, but if not, we’re here to help.

      -
      -

      Where to go from here

      +
      +

      Where to go from here#

      If you check out our list of issue categories and problem descriptions and see a question, error message or traceback that looks familiar, the relevant sub-section will likely be of the most specific help solving your issue as quickly as possible.

      As a first step to solving your issue, you can try some Basic First Aid.

      If Spyder won’t launch, check the Emergency CPR section and see if that clears it up.

      If your problem is related to the kernel not starting, autocompletion or a plugin go to Common Illnesses section.

      If you still can’t get it to work, and the problem is indeed Spyder-related, you should consult the the Calling for Help section for other resources to explore.

      Finally, if you couldn’t solve your problem and want to submit an issue to our Github issue tracker, so the bug can hopefully be fixed for everyone, Submit a Report.

      -
      -
    +
    + -
    + - -
    - - -
    +
    + + +
    +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/troubleshooting/index.html b/current/troubleshooting/index.html index ae2ce0a24..ef58266ab 100644 --- a/current/troubleshooting/index.html +++ b/current/troubleshooting/index.html @@ -1,576 +1,468 @@ - - + + + - + + Troubleshooting — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - - -
    - -
    -
    -
    -

    Troubleshooting

    + +
    - - -
    -
    +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/troubleshooting/submit-a-report.html b/current/troubleshooting/submit-a-report.html index 707f46f14..356c83d4a 100644 --- a/current/troubleshooting/submit-a-report.html +++ b/current/troubleshooting/submit-a-report.html @@ -1,593 +1,488 @@ - - + + + - + + Submit a Report — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    + +
    + +
    + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Submit a Report

    + +
    + +
    +

    Submit a Report#

    If you can’t fix your issue with any of the troubleshooting steps, then you’ll want to submit it to our issue tracker so our team can take a look at it for you. You’ll need a Github account to do this, so make sure you have one before you begin (a good idea anyway).

    Github page on Spyder's issue tracker -
    +

    Important

    Before you submit an issue, make sure you’ve searched a description of the problem and a relevant portion of the error traceback, on both Google and Spyder’s issue tracker to make sure it hasn’t been submitted before. If that’s the case, your issue will be closed as a duplicate.

    -
    -

    Ways to submit an issue

    +
    +

    Ways to submit an issue#

    There are several ways to submit an issue, either from Spyder or GitHub directly. In order of preference and difficulty:

    1. If Spyder presents an error dialog you can submit an issue directly from it. You will have to fill out a title for your issue, specify the steps that lead to this problem and click submit to Github. This will prefill an error report with your environment details, key versions and dependencies and automatically insert the error/traceback for you.

      -Github page on Spyder's issue tracker +Github page on Spyder's issue tracker +
    2. If Spyder opens and your issue does not involve an error dialog, the best way to do so is to simply select Report issue from the Help menu, which manually brings up the issue report form and fills in the key information about your Spyder installation. Describe the issue you’re experiencing (including any error/traceback information) along with a descriptive title, and click Submit to Github.

      @@ -599,9 +494,9 @@

      Ways to submit an issue

    Once you submit your report, our team will try to get back to you as soon as possible, often within 24 hours or less, to try to help you fix it.

    -
    -
    +
    +

    What to include in your report#

    Please include as much as possible of the following in your report to maximize your chances of getting relevant help and our ability to diagnose, reproduce and solve your issue.

    The key items, in order of priority:

    -
    +

    Note

    If you are reporting a specific behavior rather than an error, or the message does not fully explain what occurs, please describe in detail what actually happened, and what you expected Spyder to do.

    @@ -621,14 +516,15 @@

    What to include in your reportAbout Spyder in the Help menu; along with its key dependencies, shown in the dialog under Help ‣ Dependencies (there’s a button to copy-paste them).

    Spyder showing Spyder's info and dependencies

    If Spyder won’t launch, paste the output of conda list from your command line (or Anaconda prompt on Windows) in the Dependencies section of the issue template.

    -
    Command line showing output of conda list +Command line showing output of conda list +
  • How you installed Spyder and any other relevant packages, e.g. Anaconda, MacPorts or pip and whether Spyder has worked before since you installed it.

  • What else you’ve tried to fix it, e.g. from this guide or elsewhere on the web, and if you’ve tried to reproduce it in standalone QtConsole, IPython, and/or the plain Python interpreter.

  • Whether the problem occurred consistently before in similar situations or if this is the first time you’ve observed it.

  • Anything else special or unusual about your system, environment, packages, or specific usage that might have anything to do with the problem

  • -
    +

    Tip

    If including block(s) of code in your report, be sure to precede and follow it with a line of three backticks ``` to get a code block like this:

    print("Your Code Here!")
    @@ -636,165 +532,114 @@ 

    What to include in your report Calling for Help - Workshops - -

    -

    - - -
    - - - - - - Open chat - +
    +
    + +
    -
    -
    - Connect with us on: - - - GitHub - - - | - - Twitter - - - | - - Facebook - - - | - - YouTube - - - | - - Instagram - - - | - - Google Groups - -
    -
    -
    - - -
    - © 2009-2024 Spyder Doc Contributors | MIT License -
    - -
    - - Powered by Sphinx 3.5.4 - - - | - Page source - -
    -
    -
    -
    + +
    + + + + + + +
    + + +
    \ No newline at end of file diff --git a/current/videos/first-steps-with-spyder.html b/current/videos/first-steps-with-spyder.html index 3e28b93de..18d0ce4e1 100644 --- a/current/videos/first-steps-with-spyder.html +++ b/current/videos/first-steps-with-spyder.html @@ -1,580 +1,471 @@ - - + + + - + + First Steps with Spyder — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    + +
    + +
    + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    First Steps with Spyder

    + +
    + +
    +

    First Steps with Spyder#

    The videos in this section provide a starting point for new users who have never opened Spyder before. You’ll get familiar with opening Spyder in different ways, working with the four main panes and customizing the Spyder to your heart’s content.

    -
    -

    Getting started

    +
    +

    Getting started#

    Discover the basics of using the Spyder interface and get an introduction to its four main panes, along with a quick look at the others.

    • Find out different ways to open Spyder

    • @@ -582,32 +473,32 @@

      Getting started

    +
    +

    Learning the basics#

    Learn the basics of using Spyder’s four main panes.

    • Open and edit a file in Spyder’s Editor

    • @@ -617,25 +508,25 @@

      Learning the basics

    +
    +

    Customization#

    Learn how to customize Spyder’s interface to match your workflow and development style.

    • Choose your preferred fonts

    • @@ -643,192 +534,143 @@

      Customization

    + + -
    + - - - -
    - - -
    - +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/videos/index.html b/current/videos/index.html index 6d21da76e..0e600b412 100644 --- a/current/videos/index.html +++ b/current/videos/index.html @@ -1,576 +1,464 @@ - - + + + - - Intro Videos — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + Tutorials — Spyder 5 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - - -
    - -
    -
    -
    -

    Intro Videos

    + +
    - - -
    -
    +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/videos/working-with-spyder.html b/current/videos/working-with-spyder.html index 970e4a4ab..d4a46d347 100644 --- a/current/videos/working-with-spyder.html +++ b/current/videos/working-with-spyder.html @@ -1,579 +1,470 @@ - - + + + - + + Working with Spyder — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    + +
    + +
    + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Working with Spyder

    + +
    + +
    +

    Working with Spyder#

    In this section, you will learn about Spyder’s more advanced functionality, and explore most of the panes.

    -
    -

    Beyond the main panes

    +
    +

    Beyond the main panes#

    Explore how to take advantage of Spyder’s functionality beyond just the four core panes.

    -
    +
    +

    Improving your code quality#

    Learn how to improve the quality of your programs using code analysis.

    • Open and use Code Analysis to evaluate the quality and style of Python files

    • @@ -612,43 +503,43 @@

      Improving your code quality

    +
    +

    Optimizing your code#

    Learn how to optimize your code using the Profiler.

    -
    + + -
    + - -
    - - -
    +
    + + +
    +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/workshops/financial.html b/current/workshops/financial.html index bd61da192..12f7b77c7 100644 --- a/current/workshops/financial.html +++ b/current/workshops/financial.html @@ -1,582 +1,475 @@ - - + + + - + + Financial Data Analysis with Spyder — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    + +
    + +
    + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Financial Data Analysis with Spyder

    + +
    + +
    +

    Financial Data Analysis with Spyder#

    By the end of this workshop participants will be able to use Spyder effectively for applying some normative financial theories and models to assemble a portfolio of assets in a way that maximizes the expected return for a given level of risk. In this way, statistically-based tools are used to construct investment portfolios.

    -
    -

    Prerequisites

    +
    +

    Prerequisites#

    To follow this workshop we recommend that you have a intermediate knowledge of Python. You can visit The Python Tutorial to learn the basics of this programming language or to refresh your knowledge of Python.

    You will also need to have Anaconda (or Miniconda) and Spyder installed. More information about Spyder installation in installation guide.

    -
    +

    Important

    Spyder now offers Standalone installers for Windows and macOS, making it easier to get up and running with the application without having to download Anaconda or manually install it in your existing environment. While we still support Anaconda, we recommend this install method on those platforms to avoid most problems with package conflicts and other issues.

    @@ -587,24 +480,24 @@

    Prerequisites -

    Learning goals

    +

    +
    +

    Learning goals#

    After completing this workshop, you should be able to:

    • Apply elementary statistical analysis to stock and cryptocurrency portfolios to measure their performance

    • Understand the advantages of programming with an IDE, such as inspecting variables using the Variable Explorer and interacting with plots leveraging the Plots Pane.

    -
    -
    -

    Learner profile

    +
    +
    +

    Learner profile#

    This workshop is intended for people interested in finance who want to take their first steps in Financial Analysis using Python and Spyder.

    -
    -
    -

    Intro

    + +
    +

    Intro#

    In this workshop we will obtain financial data in real-time from Yahoo! Finance API and explore financial portfolios using Econometrics and computational tools.

    -
    -

    Why use Python for financial analysis?

    +
    +

    Why use Python for financial analysis?#

    Real-time analysis of historical and current financial data is essential for those investing in financial instruments. Python has a number of features that make it ideal for financial tasks:

    • It is easy to learn for anyone, whether they have previous programming experience or not

    • @@ -614,51 +507,51 @@

      Why use Python for financial analysis?Google Colab or Binder to do your analysis in the cloud.

    -
    -
    -

    Why should I use an IDE?

    +
    +
    +

    Why should I use an IDE?#

    Although you can use Python without an IDE (Integrated Development Environment), you will work much better with one. Spyder is a Scientific Integrated Development Environment written in Python, and designed by and for scientists, engineers, and data analysts. Spyder’s capabilities and its integration with Python make it perfect for financial analysis.

    -
    -
    -

    Introduction to financial analysis with Spyder

    + +
    +

    Introduction to financial analysis with Spyder#

    If you’re not familiar with Spyder, we recommend you start with our Quickstart. But if you want a summary, here’s a quick overview.

    -
    +

    Note

    If you already have experience with Spyder, you can skip this section.

    -
    -

    Editor

    +
    +

    Editor#

    The Editor is the place where you write your code and save it as a file (script). It allows you to easily persist your work. This is where you write the code you want to keep from the data analysis you do in IPython Console. Here you will also be able to read, edit and run the code from this workshop.

    -
    -
    -

    IPython Console

    +
    +
    +

    IPython Console#

    The IPython Console is the Spyder’s component where you write chunks of code that you want to experiment with. In this workshop, we are going to give you pieces of code that you can copy and run in this console.

    In essence, the IPython Console allows you to execute commands and interact with data using Python.

    -
    -
    -

    Variable Explorer

    + +
    +

    Variable Explorer#

    The Variable Explorer is one of Spyder’s best features. It allows you to interactively browse and manage the objects generated in the code of the currently selected IPython Console session.

    The Variable Explorer is one of the most frequently used components in this workshop. This is the pane where we will observe the data and most of the results of the analysis, except for the plots.

    -
    -
    -

    Plots pane

    + +
    +

    Plots pane#

    The Plots pane shows all the static graphs and images created in your IPython Console session. All plots generated by the code will appear in this component. This pane also allows you to save each graphic in a local file or copy it to the clipboard to share it with other people.

    -
    -
    -
    -
    -

    Preparation work

    + + + +
    +

    Preparation work#

    Before starting, you must have installed some packages and libraries needed to run the code. We recommend you to install these requirements in a virtual environment. Here we explain step by step how to do it.

    -
    -

    Set up Conda environment

    +
    +

    Set up Conda environment#

    If you would like to have Spyder in a dedicated environment to update it separately from your other packages and avoid any conflicts, you can.

    You can set up your environment in two different ways.

    -
    +

    Important

    We recommend creating the virtual environment with Anaconda (or Miniconda) as it integrates seamlessly with Spyder. You can find installation instructions in Anaconda documentation.

    -
    -

    With commands

    +
    +

    With commands#

    Just run the following command in your Anaconda Prompt (Windows) or terminal (other platforms), to create a new environment called financial-analysis:

    $ conda create -n financial-analysis
     
    @@ -670,31 +563,31 @@

    With commands pip install Historic-Crypto

    -
    +

    Important

    Spyder now offers Standalone installers for Windows and macOS, making it easier to get up and running with the application without having to download Anaconda or manually install it in your existing environment.

    -
    -
    -
    -

    Download the datasets

    +
    +
    +
    +

    Download the datasets#

    Although during the workshop we will explain how to use some APIs to download up-to-date data, you can also download the datasets in csv format from this link.

    To follow this workshop you do not need to create a new directory. However, if you have downloaded the data and want to use it instead of the APIs, you must set the directory that has the downloaded data as the working directory. In order to do this, check that the working directory is correct. You should see in the upper right corner the path to the directory where you have the downloaded data. Something like this:

    Spyder's Working Directory plugin showing the working directory downloaded-data-dir -
    -
    -

    Setting up the virtual environment in Spyder

    + +
    +

    Setting up the virtual environment in Spyder#

    Let’s check that the virtual environment we created is enabled in Spyder. Go to Preferences > Python interpreter, and use the dropdown below Use the following Python interpreter to choose your virtual environment. You should see something like this:

    Screenshot on how to set up environment in Spyder's Preferences

    Now, you have everything ready to proceed with the workshop.

    -
    -
    -

    Download the code

    + +
    +

    Download the code#

    Although the workshop is designed for you to write the code in the IPython Console, we have created a file that you can download here. This script provides all the code you will write in this workshop, and you can use it as a guide if you get lost.

    -
    -
    -
    -

    Obtain financial data

    + + +
    +

    Obtain financial data#

    When it comes to finance, being up to date is very important. So we are going to use a Python library that allows us to get updated historical Stock Market records from Yahoo! Finance API. In this way, we will be able to download data in the period of time we are interested in analyzing.

    Remember to type and run all code for this workshop in the “IPython Console” at the bottom right of Spyder.

    Screenshot IPython Console location in Spyder IDE @@ -719,8 +612,8 @@

    Obtain financial data

    We have used the Ticker class of the yfinance library to create a netflix object. This object contains attributes and methods that we can query to obtain various types of information.

    -
    -

    General stock information

    +
    +

    General stock information#

    If you want to know which methods and attributes you can query, you can do so with the built-in help() function.

    You can also type the name of the object (netflix) in the console, then type a period and hit the Tab key once. IPython suggestions will then appear to help you navigate the object:

    IPython Console auto-suggestions @@ -738,9 +631,9 @@

    General stock information

    Although pprint displays all the information, it is easier to view it in the Variable Explorer.

    -

    - -
    -

    First portfolio

    + + +
    +

    First portfolio#

    Let’s build our first stock investment portfolio! Say we are interested in investing in technology, and we want to know what performance can be obtained by putting money into some of the “heavyweights” in this industry.

    To measure the performance of our first portfolio we are going to use a classic theory in the world of finance: mean-variance portfolio (MVP) theory. This model assumes that investors only care about expected returns and the variance of such returns. The analysis is based entirely on statistical measures based on a time series of share prices, such as periodic mean returns and the variances of those returns with the same periodicity.

    - -
    +
    +

    A first glance at the portfolio#

    We want to see how our portfolio would have performed if we had invested in it from 2012 to early 2021. How could we obtain this measurement? Let’s look at the monthly closing prices of each stock. To do this we will do an automatic resample of the data. And then we will calculate the change in relative frequencies (percentages).

    The resampling will be performed with the resample("M") method and the calculation of percentages with the pct_change() method. The result will be stored in the monthly_data_1 variable.

    monthly_data_1 = close_data_1.resample("M").ffill().pct_change()
    @@ -808,7 +701,7 @@ 

    A first glance at the portfolio# dtype: float64

    -
    +
    +

    Returns and volatility#

    Remember that in the mean-variance portfolio theory what matters are the expected returns and variances. To calculate these returns, we will divide the price of the stock on one day by the price of the same stock on the previous day. We will do this by dividing the close_data_1 DataFrame by a version of itself in which we shift each record one date backwards (shift(1)). For example, if on the date 2012-01-03 a stock was valued at 1, and on the next day (2012-01-02), it was valued at 2, then in our shifted dataset, on the day 2012-01-03 the stock would be worth 1. In this way, we would divide 1 by 2. And so on with all the values of all the shares. We will also normalize the results by passing them to a logarithmic scale with np.log().

    -

    If high return is desirable, high volatility is undesirable. The risk of this portfolio is relatively large.

    -
    -
    -

    Sharpe ratio

    + +
    +

    Sharpe ratio#

    The Sharpe ratio or index is a measure of portfolio performance. It relates the portfolio’s return to its volatility, comparing the expected/realized return with the expected/realized risk. It is calculated as the difference between the actual investment returns and the expected return in a zero-risk situation, divided by the volatility of the investment. It provides a model of the additional amount of returns received for each additional unit of risk.

    Let’s formalize this in a function:

    def portfolio_sharpe(returns, weights):
    @@ -901,7 +794,7 @@ 

    Sharpe ratio# 1.2061518063427656

    -
    -
    +

    Warning

    You do not need to type the following code in the IPython Console. If you write the function above it will be enough. It is just a code presentation to explain what is inside the function.

    -
    -

    monte_carlo_sharpe function explained

    +
    +

    monte_carlo_sharpe function explained#

    Let’s now break the function down to understand what is happening. First, we create a numpy array of length 1,000 and width of the number of shares in the portfolio. Each row of the array has random weights that always add up to 1:

    sim_weights = np.random.random((1000, len(symbols)))
     sim_weights = (sim_weights.T / sim_weights.sum(axis=1)).T
    @@ -940,15 +833,15 @@ 

    monte_carlo_sha
    sharpe_ratio = volat_ret[:, 1] / volat_ret[:, 0]
     
    -

    -
    -

    Using the monte_carlo_sharpe function

    +
    +
    +

    Using the monte_carlo_sharpe function#

    We use the function to get the simulated returns and volatility of portfolio 1 (port_1_vr) and the related Sharpe ratios (port_1_sr).

    Enter the following code in the console.

    port_1_vr, port_1_sr = monte_carlo_sharpe(rets_1, SYMBOLS_1, weights_1)
     
    -
    +

    Note

    Remember that the weights are initialized randomly, so each time you run this code you will get different results.

    @@ -966,10 +859,10 @@

    Using the monte Portfolio 1 Monte Carlo Sharpe simulation scatter plot

    A roughly linear relationship can be observed between returns and volatility: the higher the volatility, the higher the gains. And the Sharpe ratio shows an important amount of variability (it is noticeable in the “width” of the line drawn).

    This seems to be a good portfolio because it has a good performance with a not very large variance.

    -

    -
    -
    -

    Optimal portfolio weights

    + + +
    +

    Optimal portfolio weights#

    Can we use the data obtained to calculate the optimal weights for the portfolio by year? Of course we can. Let’s start by delimiting the previous years as variables.

    -
    +
    +

    Comparison of expected and realized returns#

    Finally, we will use the optimal weights to calculate the expected returns and compare them with the actual returns.

    def exp_real_rets(returns, opt_weights, symbols, start_year, end_year):
     
    @@ -1050,13 +943,13 @@ 

    Comparison of expected and realized returns -

    Second portfolio

    +

    + +
    +

    Second portfolio#

    We are now going to apply all the previous code with a portfolio of a different nature. Let’s assume that instead of technology companies, we are now interested in pharmaceuticals. We will build a portfolio with stocks of Pfizer, Astra Zeneca, Johnson & Johnson.

    -
    -

    Download the data

    +
    +

    Download the data#

    Let’s download the data and format it.

    SYMBOLS_2 = ["PFE", "AZN", "JNJ"]  # Pfizer, Astra Zeneca, Johnson N Johnson
     
    @@ -1066,13 +959,13 @@ 

    Download the dataclose_data_2 = data_2[data_2.Ticker == "Close"].drop("Ticker", inplace=False, axis=1)

    -
    +

    Note

    If you do not want to use the yfinance API, you can download the close_data_2.csv file containing the closing information for this portfolio. Copy this file to your working directory. Load the data with the following instruction: >>> close_data_2 = pd.read_csv("close_data_2.csv").

    -
    -
    +
    +

    Mean and standard deviation#

    We are going to put the data in a monthly format and observe the mean and standard deviation.

    monthly_data_2 = close_data_2.resample("M").ffill().pct_change()
     
    @@ -1094,9 +987,9 @@ 

    Mean and standard deviation -

    Daily and monthly timelines

    +

    +
    +

    Daily and monthly timelines#

    Let’s better visualize the above with a couple of charts.

    +
    +

    Returns, volatility and Sharpe ratio#

    To confirm what was said in the previous section, let’s calculate returns, volatility and Sharpe ratio.

    +
    +

    Optimal pharmaceutical stock weights#

    Let us now see what are the optimal weights for each stock using the optimal_weights function.

    start_year, end_year = (2012, 2020)
     opt_weights_2 = optimal_weights(rets_2, SYMBOLS_2, weights_2, start_year, end_year)
    @@ -1178,14 +1071,14 @@ 

    Optimal pharmaceutical stock weights -

    Third portfolio

    -
    -

    Download cryptocurrencies data

    +

    +
    +
    +

    Third portfolio#

    +
    +

    Download cryptocurrencies data#

    Our third portfolio will consist of three cryptocurrencies: bitcoin (BTC), ethereum (ETH) and litecoin (LTC). To access historical data, we are going to use a library called Historic-Crypto.

    -
    +

    Important

    If you want to make use of the data without the Historic-Crypto library, you can download the dataset “crypto_hist.csv” in your working directory, and load it in memory with the instruction crypto_hist = pd.read_csv("crypto_hist.csv"), and skip to section Monthly data.

    @@ -1198,7 +1091,7 @@

    Download cryptocurrencies data
    crypto_list = Cryptocurrencies(coin_search="", extended_output=True).find_crypto_pairs()
     

    - -
    -

    Monthly data

    +
    +
    +

    Monthly data#

    Let’s take a look at the monthly history of cryptocurrency price growth.

    Portfolio 3 daily stock price

    We can note that the scale here is much larger. And the proportion of ETH growth over the other two coins is quite remarkable.

    -
    -
    -

    Return, volatility and Sharpe ratio

    + +
    +

    Return, volatility and Sharpe ratio#

    Let’s consider the return, volatility and Sharpe ratio of this portfolio.

    +
    +

    Monte carlo simulation#

    The Monte Carlo simulation also shows the non-linear correlation between risk and returns (as you can see, sometimes high risk involves only modest profits):

    Portfolio 3 Monte Carlo Sharpe simulation scatter plot

    As can be seen, there are points (bottom right) that show a very high volatility and yet have a very low expected return. In this sense, portfolio 1 represents a safer investment because the higher risk is consistently offset by higher returns.

    -
    -
    -

    Optimal cryptocurrency weights

    + +
    +

    Optimal cryptocurrency weights#

    Portfolio 3 optimal weights by year

    The optimal portfolio weights, if calculated annually, suggest that our portfolio should have been quite polarized in some years: the recommendation is to have bought only bitcoins before the start of 2016 and 2019, and only ethereum in 2018. Starting 2017 and 2020, on the other hand, our weights recommended a more balanced investment between bitcoin and ethereum. Litecoin is not recommended by our model.

    -
    -
    -

    Expected and realized returns

    + +
    +

    Expected and realized returns#

    Portfolio 3 expected and realized returns comparison

    In this graph we can see that in 2017 and 2020 the earnings obtained would have exceeded the expected earnings (with our calculated weights). In 2019 our model predicted a sharp drop in the portfolio, but in reality the portfolio did not make either annualized gains or losses that year. In contrast, in 2018, our model would have brought us heavy losses, as the value of cryptocurrencies declined sharply that year.

    The mean expected return for our portfolio is 0.6972, which is higher than the realized return of 0.4181 that we would have obtained. Having invested in this portfolio over the long term (from 2016 to the present) would have been a very good deal. Due to the high variability, investing in the short term would have been very risky. In terms of gross profits, the realized returns of this portfolio were more than double those of portfolio 1 (0.4181 > 0.1997).

    -
    -
    -
    -

    Final words

    + + +
    +

    Final words#

    The mean-variance portfolio (MVP) theory is one of the many tools available to financial analysis. In recent years, machine learning algorithms have even been used to predict the behavior of stock prices more accurately than can be achieved with any standard financial theory.

    The examples given during this workshop are not intended to serve as guidelines for you to invest your money. It is only a first step towards learning financial analysis using Python and a scientific IDE.

    In this workshop you have learned how to:

    @@ -1292,13 +1185,13 @@

    Final wordsScientific Computing and Visualization with Spyder.

    -
    -

    Homework

    +
    +

    Homework#

    If you want to check what you have learned, we suggest you try to obtain the results presented for the third portfolio. If you have any questions, you can consult the code that accompanies this workshop in our repository.

    -
    -

    -
    -

    Further reading

    + + +
    +

    Further reading#

    Much of the math used to apply MVP was the mathematics outlined in Yves Hilpisch’s excellent book, which we recommend to you:

    -
    - + + - + - - - -
    - -
    - - - - - -
    -
    - + + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/workshops/index.html b/current/workshops/index.html index b072b8912..e7685f198 100644 --- a/current/workshops/index.html +++ b/current/workshops/index.html @@ -1,576 +1,466 @@ - - + + + - + + Workshops — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - - -
    - -
    -
    -
    -

    Workshops

    + +
    - - -
    -
    +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/workshops/plugin-development.html b/current/workshops/plugin-development.html index 77caa6de2..6655c9a28 100644 --- a/current/workshops/plugin-development.html +++ b/current/workshops/plugin-development.html @@ -1,582 +1,475 @@ - - + + + - + + Plugin Development with Spyder — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    - - - - - +
    + +
    + + + + +
    +
    - - - - - - - - +
    - - - - - - -
    - -
    -
    -
    -

    Plugin Development with Spyder

    + +
    + +
    +

    Plugin Development with Spyder#

    This workshop reviews the features and possibilities of the API offered by Spyder 5—the recently released version of our favorite IDE for scientific Python—for plugin development and to extend its functionality.

    As a practical exercise, we will develop a simple plugin that incorporates a configurable pomodoro timer in the status bar and some toolbar buttons to interact with it.

    -
    -

    Prerequisites

    +
    +

    Prerequisites#

    You will need to have Spyder installed. Visit our installation guide for more information.

    -
    +

    Important

    Spyder now offers Standalone installers for Windows and macOS, making it easier to get up and running with the application without having to download Anaconda or manually install it in your existing environment. However, readers of this workshop should install Spyder using Anaconda or Miniconda, as standalone installers currently do not allow to add extra packages like the plugin we are going to develop in this workshop.

    @@ -593,9 +486,9 @@

    PrerequisitesGuru99 - PyQt tutorial

  • Python GUIs - PyQt and PySide tutorials

  • -

    -
    -

    Learning Goals

    +
    +
    +

    Learning Goals#

    By the end of this workshop participants will know:

    • The basics to develop plugins for Spyder, and get a general idea of its inner workings.

    • @@ -603,9 +496,9 @@

      Learning Goals -

      Spyder for developers

      +

    +
    +

    Spyder for developers#

    The best place to find information about contributing to Spyder or developing for Spyder is its Github repository, in particular the contribution guide.

    Spyder IDE components.
      @@ -614,53 +507,53 @@

      Spyder for developers

      Spyder uses qtpy which is an abstraction layer that allows you to work with Qt from Python regardless of whether you use either of the two reference libraries: PyQt or PySide.

    • spyder-kernels provide Jupyter kernels to Spyder, for use within its consoles.

    -
    +

    Important

    Spyder is currently developed in such a way that most of its features are implemented as plugins.

    -
    -
    -

    Types of plugins we can develop in Spyder

    +
    +
    +

    Types of plugins we can develop in Spyder#

    Types of Spyder plugins. -
    +

    Note

    A plugin is a component that adds functionality to an application, it can be a graphical component, for example, to display maps, or a non-graphical one that adds additional syntax coloring schemes.

    Formally, plugins are instances of Qt classes that modify the behavior of Spyder. Aside from a few fundamental components, most of Spyder’s functionality arises from the interaction of plugins of two types:

    -
    -

    SpyderDockablePlugin

    +
    +

    SpyderDockablePlugin#

    It is a plugin that works as a QDockWidget, this is a Qt class that provides a graphical control that can be docked inside a QMainWindow or floated as a top-level window on the desktop.

    -
    -
    -

    SpyderPluginV2

    +
    +
    +

    SpyderPluginV2#

    SpyderPluginV2 is a plugin that does not create a new dock widget on Spyder’s main window. In fact, SpyderPluginV2 is the parent class of SpyderDockablePlugin.

    -
    -
    -

    Discovering Spyder plugins

    -
    +
    +
    +

    Discovering Spyder plugins#

    +
    -
    + +
    -
    -
    -
    -

    What will we do?

    + + + +
    +

    What will we do?#

    Our practical work will consist in the implementation of the Pomodoro technique for time management in the Spyder interface.

    Description of the pomodoro technique. -
    +

    Note

    The Pomodoro Technique, designed by Francesco Cirillo, is a time management practice used to increase your focus and productivity when trying to complete assignments or meet deadlines. Choosing to use a Pomodoro Timer can help to give a task your full, undivided attention.

    @@ -675,8 +568,8 @@

    What will we do? -

    Steps

    +
    +

    Steps#

    These are the general steps that we will be following throughout this workshop:

    - -
    +
    +

    Location of Spyder Pomodoro Timer widgets in Spyder.#

    +
    + +
    Spyder Pomodoro Timer in the preferences window. -

    Spyder Pomodoro Timer in the preferences window.

    -
    -

    -
    -

    Features

    +
    +

    Spyder Pomodoro Timer in the preferences window.#

    +
    + +
    +
    +

    Features#

    A minimal planning to organize ideas.

    + +
    +

    Set up a development environment#

    In principle, we could use any Spyder installed within a conda environment according to the instructions given in the installation guide.

    However, if you use a working environment that has other dependencies and you want to keep your plugin development independent of them, it is recommended to create a new environment which only has Spyder with the minimum dependencies needed for your plugin.

    Spyder development environment. @@ -729,7 +626,7 @@

    Set up a development environment mamba install spyder

    -
    +

    Note

    • Anaconda Individual Edition is a Python distribution for data science and machine learning to be used in a single machine.

    • @@ -738,9 +635,9 @@

      Set up a development environmentmamba, is an optimized implementation of conda’s package management features, that resolves dependencies and installs packages much faster than conda.

    -
    -
    -

    Create a repository

    + +
    +

    Create a repository#

    Now that we have our local virtual environment, it is good practice to manage our source code with a version control system, and the most widely used web service for this purpose is currently Github. Here you can find, for example, the Spyder and Python repositories.

    Git and Github repository concepts.

    To create a git repository on Github, we need to follow these steps:

    @@ -753,9 +650,9 @@

    Create a repository$ git clone [repo-link]. You must have git installed and configured on your computer. If you don’t have experience using git we recommend The Carpentries workshop Version control with git.

    A detailed description of repository creation could be found in the official Github documentation, and a hello world tutorial with basic git operations from the Github interface.

    -

    -
    -

    Let’s get started

    + +
    +

    Let’s get started#

    We already have a git repository and a virtual environment where Spyder 5 is installed.

    Let’s activate our environment and go into the local folder of our repository.

    mamba activate spyder-dev
    @@ -763,7 +660,7 @@ 

    Let’s get startedcookiecutter to create the initial structure of our plugin. cookiecutter is a tool made in Python specifically designed to create project templates. -We have developed one of these templates to generate the basic structure of a plugin, it can be found at: https://github.com/spyder-ide/spyder5-plugin-cookiecutter

    +We have developed one of these templates to generate the basic structure of a plugin, it can be found at: spyder-ide/spyder5-plugin-cookiecutter

    Folder structure of our plugin.

    Let’s run cookiecutter to generate our

    $ cookiecutter https://github.com/spyder-ide/spyder5-plugin-cookiecutter
    @@ -791,8 +688,8 @@ 

    Let’s get started from 1, 2, 3, 4, 5, 6 [1]: 1

    -

    +
    +

    Building our first plugin#

    From now on we will be building the plugin step by step. In the spyder pomodoro timer repository you will find the final version of the code for you to take a look at it, in case we are missing any detail.

    -
    -

    Widgets

    +
    +

    Widgets#

    The best way to start building our plugin is by implementing its graphical components first in widgets.py

    Let’s call the initial version, without any editing INITIAL. In INITIAL, widgets.py is as follows:

    @@ -869,7 +766,7 @@

    Widgets_ = get_translation("spyder_pomodoro_timer.spyder")

    - - -
    -

    The container

    + +
    +

    The container#

    The next step in the development of our plugin is to create an instance of the widget we wrote above, so we can add it to Spyder’s status bar. For that, we need to use a container. Due to Qt specifics, we need an instance of QWidget (the container) to be the parent of all other widgets part of our plugin (as mentioned above).

    Thus, the COOKIECUTTER version of container.py is:

    from spyder.api.config.decorators import on_conf_change
    @@ -975,9 +872,9 @@ 

    The containerself.pomodoro_timer_status = PomodoroTimerStatus(self)

    -
    -
    -

    Plugin

    + +
    +

    Plugin#

    Finally, we define our plugin so that it is registered within Spyder. The INITIAL version (i.e. the one created by cookiecutter) for plugin.py is:

    - -
    -

    How to test our plugin

    + + +
    +

    How to test our plugin#

    Now it is time to see how our plugin looks in the Spyder interface.

    From the root folder of our plugin, we activate the environment where Spyder is installed, and run:

    +
    +

    Enhancing our plugin#

    From now on we are going to go into details of how things are implemented in Qt. So in case you have any doubts, the Qt documentation will be your best guide. We created an annex to this workshop that quickly explains way the fundamental concepts of Qt for those in a hurry: Qt Fundamentals

    -
    -

    Timer updates

    +
    +

    Timer updates#

    The first problem with our plugin is that its pomodoro timer is not being updated. To activate it we can use the QTimer in PomodoroTimerStatus, which is present because it’s an instance of BaseTimerStatus.

    The second version where the value in the status bar is updated is called TIMER.

    Let’s go back to widgets.py and add this constant below the import lines (line 22).

    @@ -1163,13 +1060,13 @@

    Timer updatesdisplay_time method that converts the current countdown value, which is measured in milliseconds, into a human-readable format. And update_timer simply keeps updating the countdown until it reaches zero.

    If we run Spyder again we will find that our timer has come to life.

    Timer countdown working. -

    -
    -
    -

    Timer controls

    + + +
    +

    Timer controls#

    Now we need a way to control our timer. We can achieve this by adding some buttons to Spyder’s toolbar, which will be useful to learn how to work with toolbars, menus and actions in Spyder.

    -
    -

    PomodoroTimerToolbar

    +
    +

    PomodoroTimerToolbar#

    The next version where actions are added to the toolbar is called ACTIONS.

    TIMER -> ACTIONS widgets.py diff

    Let’s go back to widgets.py and import the Spyder application toolbar class:

    @@ -1199,9 +1096,9 @@

    PomodoroTimerToolbar...

    - -
    -

    Create the Pomodoro Toolbar

    + +
    +

    Create the Pomodoro Toolbar#

    Now we are going to create a new section in our toolbar and associate some functionality to it by means of actions. This particular information is recommended to be included in the api.py file because this way we can offer endpoints to the rest of Spyder and new plugins for tweaking the behavior of our plugin.

    TIMER -> ACTIONS api.py diff

    Let’s add the following to the end of api.py:

    @@ -1220,9 +1117,9 @@

    Create the Pomodoro Toolbar -

    Add actions to the toolbar

    +

    +
    +

    Add actions to the toolbar#

    TIMER -> ACTIONS container.py diff

    Now let’s go to container.py, where we are going to implement the behavior of our new toolbar and its actions. In this case, we are not going to specify the internal behavior of our plugin, but the relationship between its widgets and other areas of Spyder, so it is more convenient to do it in the container.

    @@ -1338,9 +1235,9 @@

    Add actions to the toolbarpause field of pomodoro_timer_status, and in the case of stop_pomodoro_timer the countdown is restarted.

    -

    -
    -

    Register the toolbar

    + +
    +

    Register the toolbar#

    TIMER -> ACTIONS plugin.py diff

    A final mandatory step is to go to plugin.py and register this new toolbar component.

    To do this, add Plugins.Toolbar to the plugin requirements:

    @@ -1355,9 +1252,9 @@

    Register the toolbartoolbar.add_application_toolbar(container.pomodoro_timer_toolbar)

    - -
    -

    Review the changes

    + +
    +

    Review the changes#

    The first thing we can notice is that we already have the corresponding buttons in the toolbar.

    Pomodoro timer toolbar buttons

    The strings that were entered as the tip parameter in the creation of the actions are shown here as the buttons’ tooltips.

    @@ -1365,13 +1262,13 @@

    Review the changes

    Finally, let’s check how the new Pomodoro Timer control buttons in the toolbar interact with the component in the status bar.

    Interaction between the Pomodoro Timer toolbar and its status bar. -

    - -
    -

    Add a Configuration Page

    + + +
    +

    Add a Configuration Page#

    Another feature of Spyder plugins is that they can have configurable options that appear in Spyder’s Preferences window.

    -
    -

    Configuration defaults

    +
    +

    Configuration defaults#

    The final version in which we add a configurable parameter will be called CONFPAGE.

    The first step is to define what options we want to offer to our users. For this we must create a new file, which we can call conf.py. In this file we will write the following:

    ACTIONS -> CONFPAGE config.py diff

    @@ -1408,9 +1305,9 @@

    Configuration defaults

    Note that we are moving the definition of POMODORO_DEFAULT from widgets.py to conf.py, since we now have a dedicated place for default configuration values.

    - -
    -

    Configuration page

    + +
    +

    Configuration page#

    Now, we need to build the page that will appear in the Preferences window. For this, we edit the confpage.py file generated by cokkiecutter as follows:

    ACTIONS -> CONFPAGE confpage.py diff

    +
    +

    Propagate configuration changes#

    Since we moved all the configuration information to conf.py, now we have to import it from there into widgets.py.

    ACTIONS -> CONFPAGE widgets.py diff

    # Local imports
    @@ -1483,9 +1380,9 @@ 

    Propagate configuration changesself.value = self.display_time()

    -
    -
    -

    Registering preferences

    + +
    +

    Registering preferences#

    Finally, it is necessary to activate the use of preferences in plugin.py, by requiring the Preferences plugin

    ACTIONS -> CONFPAGE plugin.py diff

    -
    + +
    +

    Publishing your plugin#

    Since the recommended way to install Spyder is through conda, the obvious choice would be to publish our plugin through a channel like conda-forge, but this is a task that is beyond the scope of this workshop due to its complexity.

    However, the tools used to publish packages in conda are usually based on the packages published in PyPI. So let’s see how to publish our plugin there.

    Publish your plugin in PyPI. -
    -

    PyPI and TestPyPI

    +
    +

    PyPI and TestPyPI#

    The first thing we have to do is to create an account on the PyPI and TestPyPI websites. Although our package will be finally published in PyPI, it is advisable to use TestPyPI to test that our package can be published properly without generating additional load to the PyPI servers or affecting their logs.

    Next, we need edit the setup.py file at the root of our project with our own data. Fortunately, cookiecutter created one for us.

    To upload our package to PyPI we have to use a tool called Twine that makes this task much easier. And we can install it in our conda environment using:

    $ mamba install twine
     
    -
    -
    -

    Build and check the package

    +
    +
    +

    Build and check the package#

    Before publishing our plugin we must package it. To do it we must write the following from the root folder of our project (where setup.py is placed):

    $ python setup.py sdist bdist_wheel
     
    @@ -1542,9 +1439,9 @@

    Build and check the package dist/spyder-pomodoro-timer-0.0.1.dev0.tar.gz: PASSED

    - -
    -

    Upload to PyPI

    + +
    +

    Upload to PyPI#

    Now we can use twine to upload the distribution packages we have built. First, we will upload them to TestPyPI to make sure everything works:

    $ twine upload --repository-url https://test.pypi.org/legacy/ dist/*
     
    @@ -1577,10 +1474,10 @@

    Upload to PyPI
    $ pip install spyder-pomodoro-timer
     

    -
    - -
    -

    Final words

    + + +
    +

    Final words#

    The possibility of making a tool extensible through plugins, extensions or addons, as they are usually called, is a fundamental feature that allows taking advantage of the talent of third-party developers to respond to needs and enhancements that are beyond the scope of the application’s core development team.

    Similarly, a plugin-based system makes the application much easier to maintain. Eventually, the ability to enable and disable plugins makes it more adaptable to different use cases. For instance, at present it would be inconceivable to think of a web browser that does not have extensions to block advertising or organize links, even if those features don’t come by default on them.

    In Spyder we have put special interest in consolidating an API that allows the development of plugins in a consistent way. The main focus of the development effort between versions 4 and 5 was in this direction and we are at a key moment where we expect to capitalize on all this work.

    @@ -1604,506 +1501,187 @@

    Final wordsSpyder-IDE Github organization space.

    If you are interested in an introduction to scientific computing with Spyder, you can visit the workshop Scientific Computing and Visualization with Spyder.

    If you are interested in an introduction to financial analysis with Spyder, you can visit the workshop Financial Data Analysis with Spyder.

    -
    -

    Homework

    +
    +

    Homework#

    As you may have noticed, there were some features left to implement such as notifications when pomodoros are completed. Try to implement them and do not hesitate to contact us if you have any doubts.

    -
    -

    -
    -

    Further reading

    + + +
    +

    Further reading#

    In the plugin-examples repository you can find additional examples that will surely be useful for you to further understand Spyder plugin development.

    A more in-depth review of the Spyder repository itself, especially its simpler plugins, such as History, Plots or Working directory, may help you understand it better. As well as a review of the various helper functions, widgets and mixins present in spyder.api.

    -
    - + + - + - - - -
    - -
    - - - - - -
    -
    - + + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/workshops/qt_fundamentals.html b/current/workshops/qt_fundamentals.html index 91171ec93..c2e24ba9d 100644 --- a/current/workshops/qt_fundamentals.html +++ b/current/workshops/qt_fundamentals.html @@ -1,579 +1,472 @@ - - + + + - + + Qt Fundamentals — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - - - - - +
    - - - - - - -
    - -
    -
    -
    -

    Qt Fundamentals

    + +
    + +
    +

    Qt Fundamentals#

    Qt is a multiplatform widget toolkit for creating native graphical user interfaces. Qt is also a very complete development framework that offers utilities for building applications, and libraries of extensions for Networking, Bluetooth, Charts, 3D rendering, Navigation (as GPS), among others.

    -
    -

    Basic Qt Components

    +
    +

    Basic Qt Components#

    As mentioned before, Spyder’s plugin development consists of extending the functionality of its Qt-based graphical interface.

    To develop a GUI we will add graphical elements of interaction known as widgets, arrange them using layouts. Then, we interconnect those widgets using customized procedures implemented as functions or methods, allowing to trigger behavior from user interaction. In the following, we will develop these ideas in more detail.

    Each type of Qt component is a class starting with the letter Q followed by a name related to its functionality.

    @@ -584,255 +477,171 @@

    Basic Qt ComponentsQMainWindow is a pre-built widget that provides many standard window features as toolbars, menus, a status bar, dockable widgets and more, which serves as the basis for the application.

    -
    -

    Signals & Slots

    +
    +

    Signals & Slots#

    Signals are notifications emitted by widgets when something happens. That something could be different things, from pressing a button, to changing text in an input box, to changing text in the window. Many signals are initiated by user action, but this is not a rule.

    Slots are signal receivers. Functions or methods could be used as slots, by connecting a signal to them. If a signal sends data, the receiver callable will also receive it. Many Qt widgets also have their own built-in slots, so the corresponding widgets are notified automatically.

    -
    -
    -

    Widgets

    +

    +
    +

    Widgets#

    In computer science a Widget is a shortened form of “window gadget”. A widget is an element of interaction, such as a button, or a container for other widgets, as panels or tabs. The QWidget class is the fundamental class for creating interfaces in Qt, it receives events from the window system, and renders its representation on the screen. A widget can provide a container for grouping other widgets, and if it is not embedded in a parent widget, it becomes a window.

    -
    -
    -

    Layouts

    +
    +
    +

    Layouts#

    Interfaces are built by embedding widgets inside widgets, and since they are visual components they are visually organized by means of layouts. A layout indicates how the widgets fill their container, either as columns, rows, cells in a matrix or stacked so that only one is visible at a time. Those are the 4 basic layouts available in Qt: QHBoxLayout, QVBoxLayout, QGridLayout, and QStackedLayout.

    -
    -
    -

    Actions, Toolbars & Menus

    + +
    +

    Actions, Toolbars & Menus#

    User interfaces of desktop applications usually use QToolbar and QMenu. Since these are alternative ways to access the same functionality, Qt provides QAction as a way to avoid duplication of functions. Thus, each time a menu option or a toolbar button gives access to the same function, they point to the same action.

    -
    -
    -

    Dialogs

    + +
    +

    Dialogs#

    A Dialog is a GUI component that communicates with the user. Dialogs are commonly used for functions that do not fit into the main interface. In Qt, by design QDialog is a modal (or blocking) window that show in front of the main Window until it is dismissed.

    Qt provides some special dialogs for the most common use-cases as file Open/Save, font selection, error messages, color choosing, printing, among others.

    -
    -
    -

    Windows

    + +
    +

    Windows#

    If an application requires additional windows that do not block the main window, these are generated as non-parent QWidget instances. These are used for tasks that happen in parallel over long-running processes such as displaying graphs or document editing.

    -
    -
    -

    Events

    + +
    +

    Events#

    An Event denote every interaction the user has with a Qt application. There are several types of events designed to address different types of interactions. In Qt they are represented by QEvent instances that contain information about what prompted them, and are passed to specific handlers that are responsible for triggering further actions.

    -
    -
    -
    + + + -
    + - - - - - +
    + + + +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/current/workshops/scientific-computing.html b/current/workshops/scientific-computing.html index 55fd22dc3..21ebde502 100644 --- a/current/workshops/scientific-computing.html +++ b/current/workshops/scientific-computing.html @@ -1,581 +1,474 @@ - - + + + - + + Scientific Computing and Visualization with Spyder — Spyder 5 documentation - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - - + + + + +
    + + - - - - - + + + + + + + +
    +
    +
    + + + + Ctrl+K +
    +
    +
    + +
    + + + + + +
    +
    - - - - - - - - +
    - - - - - -
    - -
    -
    -
    -

    Scientific Computing and Visualization with Spyder

    + +
    + +
    +

    Scientific Computing and Visualization with Spyder#

    This workshop allows you to explore some of Spyder’s features that make Spyder an ideal IDE for using the scientific tools offered by Python. Throughout the workshop, we will apply the scientific method to answer some questions related to our preferences and cognitive abilities. By the end of this workshop participants will be able to use Spyder to explore data, analyze it with some statistical tools and plot the relationship between variables.

    -
    -

    Prerequisites

    +
    +

    Prerequisites#

    You will need to have Spyder installed. Visit our installation guide for more information.

    -
    +

    Important

    Spyder now offers Standalone installers for Windows and macOS, making it easier to get up and running with the application without having to download Anaconda or manually install it in your existing environment. While we still support Anaconda, we recommend this install method on those platforms to avoid most problems with package conflicts and other issues.

    @@ -585,24 +478,24 @@

    PrerequisitesThe Python Tutorial to learn the basics of this programming language.

  • Some knowledge of Statistics (hypothesis testing , ANOVA, p-value)

  • -

    -
    -

    Learning goals

    +
    +
    +

    Learning goals#

    After completing this workshop, you should be able to:

    • Apply the scientific method to answer questions related to psychometric variables

    • Understand how to use Spyder’s built-in scientific computing tools

    -
    -
    -

    Learner profile

    +
    +
    +

    Learner profile#

    This workshop is intended for people who want to learn how to answer questions scientifically from a dataset. We have also designed it to serve as a tutorial for learning how to use Spyder as a research tool.

    -
    -
    -

    Intro

    + +
    +

    Intro#

    In this workshop we will explore a data set and use it to answer some questions using the scientific method.

    -
    -

    Why do scientific research with Python?

    +
    +

    Why do scientific research with Python?#

    Python is a mature programming language that has been chosen by much of the scientific community to support the research process. There are a few reasons for this:

    • It is versatile and easy to learn and use

    • @@ -613,13 +506,13 @@

      Why do scientific research with Python?Jupyter Notebooks and implementations of these in the cloud (Google Colab or Binder)

    -
    -
    -

    How can Spyder help me in my scientific research?

    +
    +
    +

    How can Spyder help me in my scientific research?#

    Spyder is a Scientific Integrated Development Environment written in Python, and designed by and for scientists, engineers, and data analysts. It features a unique combination of the advanced editing, analysis, debugging, and profiling functionality of a comprehensive development tool with the data exploration, interactive execution, deep inspection, and beautiful visualization capabilities of a scientific package. Together with Python, it provides a very complete set of tools for scientific computing.

    -
    -
    -

    The basic steps of the scientific method

    + +
    +

    The basic steps of the scientific method#

    The scientific method is a set of good practices used to achieve new knowledge in a valid way. Broadly speaking, the stages of the scientific method are as follows:

    1. Observation: first find something that needs an explanation

    2. @@ -630,51 +523,51 @@

      The basic steps of the scientific method -

      Introduction to scientific research with Spyder

      +

    +
    +

    Introduction to scientific research with Spyder#

    If you’re not familiar with Spyder, we recommend you start with our Quickstart. But if you want a summary, here’s a quick overview.

    -
    +

    Note

    If you already have experience with Spyder, you can skip to Preparation work section.

    -
    -

    Editor

    +
    +

    Editor#

    The Editor is the place where you write your code and save it as a file (script). It allows you to easily persist your work. This is where you write the code you want to keep from the data analysis you do in IPython Console. Here you will also be able to read, edit and run the code from this workshop.

    -
    -
    -

    IPython Console

    +
    +
    +

    IPython Console#

    The IPython Console is the Spyder’s component where you write chunks of code that you want to experiment with. In this workshop, we are going to give you pieces of code that you can copy and run in this console.

    In essence, the IPython Console allows you to execute commands and interact with data using Python.

    -
    -
    -

    Variable Explorer

    + +
    +

    Variable Explorer#

    The Variable Explorer is one of Spyder’s best features. It allows you to interactively browse and manage the objects generated in the code of the currently selected IPython Console session.

    The Variable Explorer is one of the most frequently used components in this workshop. This is the pane where we will observe the data and most of the results of the scientific analysis, except for the plots.

    -
    -
    -

    Plots pane

    + +
    +

    Plots pane#

    The Plots pane shows all the static graphs and images created in your IPython Console session. All plots generated by the code will appear in this component. You will also be able to save each graphic in a local file or copy it to the clipboard to share it with other researchers.

    -
    -
    -

    Code Analysis (share a stylish code!)

    + +
    +

    Code Analysis (share a stylish code!)#

    Wouldn’t it be great to have a tool to be able to detect code errors, stylistic problems, bad practices, inconsistencies and other issues? This is precisely the task of the Code Analysis. Your code can run, but if you are going to share it with other researchers it would be great if it is both readable and neat as well.

    -
    -
    -
    -
    -

    Preparation work

    + + + +
    +

    Preparation work#

    Before starting, you must have installed some packages and libraries needed to run the code. We recommend you to install these requirements in a virtual environment. Here we explain step by step how to do it.

    -
    -

    Setting up the Conda environment

    +
    +

    Setting up the Conda environment#

    If you would like to have Spyder in a dedicated environment to update it separately from your other packages and avoid any conflicts, you can.

    You can set up your environment in two different ways.

    -
    +

    Important

    We recommend creating the virtual environment with Anaconda (or Miniconda) as it integrates seamlessly with Spyder. You can find installation instructions in Anaconda documentation.

    -
    -

    1. With commands

    +
    +

    1. With commands#

    Just run the following command in your Anaconda Prompt (Windows) or terminal (other platforms), for a minimal install of Spyder into a new environment called scientific-computing:

    -
    +

    Warning

    Spyder now offers Standalone installers for Windows and macOS, making it easier to get up and running with the application without having to download Anaconda or manually install it in your existing environment. If you use the standalone installer, there is no need to install spyder=5 with conda.

    -
    -
    -

    2. From an environment.yml file

    +
    +
    +

    2. From an environment.yml file#

    You can also install the virtual environment easily using the environment file (scientific-computing.yml) that we share with you. Just run the following command in the terminal (you must have the environment file in the current directory):

    $ conda env create -f scientific-computing.yml
     
    -
    -
    -

    Activate environment

    +
    +
    +

    Activate environment#

    You can now enter the newly created virtual environment in this way:

    $ conda activate scientific-computing
     
    -
    -
    -
    -

    Downloading the dataset

    + + +
    +

    Downloading the dataset#

    We are going to work with a public dataset called OKCupid, collected by Kirkegaard and Bjerrekaer. The dataset is composed of 68,371 records and 2,626 variables.

    Download the OKCupid dataset to a directory of your choice.

    -
    -
    -

    Setting up the working directory

    + +
    +

    Setting up the working directory#

    The virtual environment and the data file are now ready. The only thing that remains is to create a directory to work in. In your operating system, create a new directory with the name of your choice. Then copy and unzip the dataset file there.

    Here is an example (on Linux or macOS):

    +
    +

    Download the code#

    Although the workshop is designed for you to write the code in the IPython Console, we have created a file that you can download. This script provides all the code you will write in this workshop, and you can use it as a guide if you get lost.

    -
    -
    -
    -

    The dataset

    + + +
    +

    The dataset#

    OKCupid is a dataset that gathers information obtained from the online dating site OKCupid. It consists of 68,371 records collected automatically employing a scraper that extracted public information.

    The dataset contains demographic data (e.g., gender, sexual orientation and age). It also includes answers to general questions used by the website’s algorithm to calculate some personality indicators to help find compatible matches.

    If you want more information about how this dataset was collected and what kind of information it contains you can get it in this paper: The OKCupid dataset.

    @@ -756,13 +649,13 @@

    The dataset

    You can see that the object is of type DataFrame and the number of rows and columns of the object.

    -

    -
    -

    Explore the dataset

    -
    -

    Age

    + +
    +

    Explore the dataset#

    +
    +

    Age#

    Now, let’s explore one of the variables, in this case, the numeric variable age (d_age).

    -
    +

    Note

    In the OKCupid dataset, all demographic variables are prefixed with “d_” and profile variables with “p_”.

    @@ -778,7 +671,7 @@

    Age More variables in Variable Explorer

    The values are floats. The lowest age is 18.0 years and the highest is 100.0 years.

    -

    Age histogram with mean line -
    -
    -

    Religion seriosity

    + +
    +

    Religion seriosity#

    We know the extent of the dataframe and we have seen how to explore a quantitative variable. Now let’s move on to a qualitative variable. The columns attribute shows a list of column names in the dataframe. We also know that demographic variables are prefixed with “d_”, so we can look for variable names that correspond to this prefix.

    demograph = [v for v in list(data.columns) if v.startswith("d_")]
     
    @@ -846,10 +739,10 @@

    Religion seriosity -

    Think of a theory and write a hypothesis

    +

    + +
    +

    Think of a theory and write a hypothesis#

    A theory is nothing more than an explanation of something. For example, we could get involved in the eternal conflict between cats and dogs. I, as a dog person, might have a theory (unscientific, of course) that those who prefer to have the companionship of a dog are smarter people than those who prefer a wicked (but lovable) kitty. To test the support of a theory, one can make a prediction based on it and see how this prediction behaves in an experiment or a concrete situation. We call this prediction a hypothesis.

    A hypothesis is a statement that can be tested employing the scientific method. They must be verifiable using empirical evidence or data. For example, green is the best color is not a hypothesis since it cannot be proven or disproven.

    Concerning the above theory of a person’s pet preferences, to explore it we should find two variables to relate. The first variable would be related to a self-identification as a cat person or dog person. The second variable would be related to a person’s ability to solve problems and situations.

    @@ -859,13 +752,13 @@

    Think of a theory and write a hypothesis +

    Note

    SPOILER ALERT: If you are a cat person, and feel you should immediately leave this workshop, I suggest you stay. If you’re not a cat person, stay too.

    -

    -
    -

    Build the test

    + +
    +

    Build the test#

    We already know which questions will be part of the cognitive ability test. Now we are going to process this data to obtain the scores for each person.

    First, we make a copy of the original dataset:

    ca_test = data.copy()
    @@ -890,7 +783,7 @@ 

    Build the testprint(f"{QUESTION} not found.")

    -
    +

    Important

    Some test_items questions are not in the data but don’t worry about that. We use a try... except block to ignore these errors. Answering these questions was optional, so many OkCupid site users did not answer all of them. So we have removed from the records the users who did not answer the 14 questions we have chosen for the cognitive ability test. This reduced the sample size considerably. There are other ways to avoid this reduction, but they are outside the scope of this workshop.

    @@ -911,8 +804,8 @@

    Build the testca_test dataframe for the answers of each column starting with “resp” (we use the regular expression regex="^resp" and the method filter) and sum the True values of each row with sum(axis=1). Then we store these results in the “cognitive_score” column of the ca_test dataset.

    You can see the results of these operations by typing in the IPython Console ca_test.cognitive_score.describe(). If you do so, in count you will see that the new number of records has been reduced to 479 (the rest of the 68,371 users did not answer all of these questions).

    -

    +
    +

    Relate variables#

    Remember that the hypothesis relates two variables: which pet do you prefer and cognitive ability. The measurement of pet preferences will be made from question q997 (categorical or qualitative variable) and cognitive ability will be measured from the sum of the correct answers on the test (quantitative interval variable). With this type of variable we can make some box plots to see if there are differences between the means.

    But first, let’s change the standard Seaborn palette, to get prettier plots.

    palette = sns.color_palette("husl")
     sns.palplot(palette)
     
    -
    +

    Note

    Seaborn allows you to choose from different styles of graphics and color palettes. More information is available at https://seaborn.pydata.org/tutorial/color_palettes.html

    @@ -946,7 +839,7 @@

    Relate variables

    Box plots or box-whisker diagrams display, near the center of the box, the mean of the data as a horizontal line. The lines bordering the box represent 50% of the observations (interquartile range ). Outside the box, upwards and downwards, we find two whiskers: the lower one represents the mean of the values in the lower part of the dataset, and the upper one represents the mean of the values in the upper part of the dataset. The points beyond the whiskers are outliers.

    -
    -

    +
    +

    ANOVA test#

    To make sure that the differences between the means are statistically significant, we will perform an ANOVA (analysis of variance) because we are going to compare the means of more than two groups.

    How does ANOVA work? This analysis tells us whether three or more means are equal. If so, this would support the null hypothesis.

    -
    +

    Note

    The null hypothesis is an alternative prediction to the one we have stated in our hypothesis. The null hypothesis simply states that the observed differences in means are due to random variations that occur when samples are collected.

    An ANOVA produces an F-ratio (also called F-statistic) that compares the amount of systematic variation in the data (variation that can be explained by the model or hypothesis) with the amount of unsystematic variance (variation that cannot be explained by our hypothesis or model). This means that F is the ratio of the model to its error. ANOVA also produces a p-value that indicates the probability that the variation can be attributed to the null hypothesis. The smaller the p-value, the less likely it is that the observed variation is due to chance.

    -
    -

    Formatting the data

    +
    +

    Formatting the data#

    To perform an ANOVA, let’s start by pivoting the dataset with the cognitive ability test results. The pet preferences values will now be the column names, and each row will represent a person.

    -
    +

    Warning

    To perform an ANOVA, certain requirements or assumptions must be met. For example, the distributions of the residuals must be normal. This is not the case here. There are more appropriate statistical tests for this example, and the possibility of performing certain transformations on the data in order to apply ANOVA in this case. However, we use ANOVA because it is a fairly popular test, and because the purpose of this workshop is to serve as an introduction to scientific computing with Spyder. We do not intend here to obtain scientific results for publication.

    @@ -1004,7 +897,7 @@

    Formatting the datadog_or_cat_pivot.dropna(how="all", inplace=True)

    - -
    +
    +

    Run ANOVA#

    Now, let’s run ANOVA and store the output in two variables: f_value and p_value. Notice that since dog_or_cat_samples is a list, we must pass the argument with an asterisk (*dog_or_cat_samples).

    f_value, p_value = stats.f_oneway(*dog_or_cat_samples)
     

    With the help of stats.f_oneway in the Help Pane you can read a description of the output of this function, some interesting notes about the test, and some references that you can use to better understand the nature of this analysis.

    -
    +

    Important

    In the Help pane you will read that ANOVA requires certain assumptions to be satisfied. In this workshop we have not checked those assumptions because our goal is merely to show some Spyder functions that make the research work easier. Thus, the results obtained in this example with ANOVA should not be taken too rigorously.

    @@ -1038,13 +931,13 @@

    Run ANOVAf_critical (2.6241) is larger than that of f_value (0.5813). This means that the variance between the means of these groups is not significantly different. Since the p value indicates that we cannot rule out random variations, then we have to discard our hypothesis.

    What is the conclusion of all this? There seems to be little or no evidence in our data to think that there is indeed a correlation between a person’s pet preferences and his or her ability to solve practical or abstract problems. Cat and dog owners, rejoice!

    -

    -
    -
    -

    Report and share

    + + +
    +

    Report and share#

    In science, sharing results, good and bad, is critical. Today, in scientific computing, it is also crucial to share data, and the code used to process and analyze it. To help with this, we will use Spyder’s Code Analysis.

    -
    -

    Code Analysis

    +
    +

    Code Analysis#

    When you share code, you want it to be readable, clean, and not overly complex. The Code Analysis component can help us detect these issues and even bugs that can affect the performance of our code.

    To see an example, you can open the scientific-computing-astro.py file and run the Code Analysis (open the file in the pane and click on the green triangular button in the upper right corner).

    Code Analysis pane Example for astrological sign and cognitive ability @@ -1057,10 +950,10 @@

    Code Analysis -

    Final words

    +

    +
    +
    +

    Final words#

    In this workshop we have taken the first steps to use Spyder for scientific computing. We have seen how from a question or doubt a hypothesis is raised. This question can also emerge from the exploration of some data, which can be done by calculating some measures (such as mean, median, standard deviation) or by drawing some plots.

    Often, in order to answer the question, we must process some data (for example, for the construction of a cognitive ability test).

    Finally, we try to establish a relationship between variables with some statistical tests. The results of these tests will support or not our initial hypothesis.

    @@ -1080,13 +973,13 @@

    Final wordsofficial documentation.

    Thank you for reaching the end of this workshop! We hope you found it helpful and informative.

    If you are interested in an introduction to financial analysis with Spyder, you can visit the workshop Financial Data Analysis with Spyder.

    -
    -

    Homework

    +
    +

    Homework#

    If you want to check what you have learned, we suggest you analyze the data to try to answer the following question: Do the different zodiac signs influence the results of a cognitive ability test?, you can check the Python script scientific-computing-astro.py if you have any doubts.

    -
    -

    -
    -

    Further reading

    + + +
    +

    Further reading#

    For a description of the dataset used, see the following paper:

    -
    -
    + + - + - - - -
    - -
    - - - - - -
    -
    - + + + + +
    + +
    + + + + + + + + + \ No newline at end of file

    Spyder and Spyder-Kernels version compatibility#

    Spyder

    Spyder-Kernels